您的位置:首页 > Web前端

Perfect Squares

2015-09-18 03:32 218 查看
Given a positive integer n, find the least number of perfect square numbers (for example,
1,
 4, 9, 16, ...
) which sum to n.

For example, given n =
12
, return
3
because
12
 = 4 + 4 + 4
; given n =
13
, return
2
because
13
 = 4 + 9
.

public int numSquares(int n) {
       int[] dp = new int[n + 1];
       Arrays.fill(dp, Integer.MAX_VALUE);
       dp[0] = 0;
       for(int i = 0; i <= n; i++){
           for(int j = 1; i + j * j <= n; j++){
        	   /**
        	    * dp[i] + 1 中的1代表j*j这个组合
        	    * e.g:dp[0+2*2] = min(dp[4],dp[0]+1)
        	    * 相当于0的组合方式+2*2的组合方式,得到了4的组合方式
        	    * 
        	    * e.g:4
        	    * i=0,j=2
        	    * dp[4] = min(dp[4],dp[0]+1) = min(max,0+1) = 1
        	    * i=3,j=1
        	    * dp[4] = min(dp[4],dp[3]+1) = min(1,3+1) = 1
        	    * dp[3] + 1 中的1相当于1*1
        	    */
               dp[i  + j * j] = Math.min(dp[i + j * j], dp[i] + 1);
            }
       }
       return dp
;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: