classSolution {publicintnumSquares(int n) {// base case must be dp[0]=0 not dp[1]=1;// dp[0] = 0;// dp[i] = min(dp[i-x^2])+1; (x = 0,1,2,...sqrt)int[] memo =newint[n+1]; for (int i=1; i<=n; i++){// the result won't be larger than iint min = i-1;int sqrt = (int) Math.sqrt(i);for(int j=1; j<=sqrt; j++){ min = memo[i-j*j]<min? memo[i-j*j]: min; } memo[i] = min+1; }return memo[n]; }}