Perfect Squares(完美平方)

http://www.lintcode.com/zh-cn/problem/perfect-squares/?rand=true

import java.util.Arrays;

public class Solution {
    /*
     * @param n: a positive integer
     * @return: An integer
     */
    public int numSquares(int n) {
        // write your code here
//        用一个数组来表示每个数可以由几个完全平方数表示
        int[] dp = new int[n + 1];
//        后边有用
        Arrays.fill(dp, Integer.MAX_VALUE);
        for (int i = 0; i * i <= n; i++) {
//            是完全平方数的全置为1
            dp[i * i] = 1;
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j * j <= i; j++) {
//                i=a+j*j
//                a=i-j*j  i的完全平方数的个数就是a的个数再加1,
// 因为i本身可能是完全平方数,所以取小值就可以了。
// 这时就体现了初始值给最大的作用
                dp[i] = Math.min(dp[i - j * j] + 1, dp[i]);
            }
        }
        return dp[n];
    }
}

你可能感兴趣的:(Perfect Squares(完美平方))