leetcode279. 完全平方数(动态规划)

78 阅读1分钟

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

示例 1:

输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.

解题思路

数组含义:dp[i]数字i对应组成和的完全平方数的个数最少
状态转移: dp[i]=Math.min(dp[i-j
j]+1,dp[i]) 逐个取小于i的平方数,将i分解为一个不可切割的平方数和可分解成平方数的数字,去最小值。
初始化:将数组用最大值填充
*

代码

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