leetcode 279. Perfect Squares

leetcode 279. Perfect Squares

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.

动态规划,

对于第i个数找到离他最近的完全平方数j*j,那么他的最小数应该为 dp[i-j*j]+dp[j*j],当然这个数不一定是最小的,所以需要遍历到1.

public class Solution {
    public int numSquares(int n) {
        int[] dp=new int[n+1];
       Arrays.fill(dp,Integer.MAX_VALUE);
       dp[1]=1;
       for (int i=2;i<=n;i++){
           int sqr=(int)Math.sqrt(i);
           if (sqr*sqr==i){
               dp[i]=1;
           }else {
               for (int j=sqr;j>=1;j--){
                    dp[i]=Math.min(dp[i],dp[i-j*j]+dp[j*j]);
               }
           }
       }
       return dp[n];
    }
}

 

posted on 2017-07-06 17:34  sure0328  阅读(80)  评论(0)    收藏  举报

导航