https://leetcode.cn/problems/perfect-squares/
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
示例 1:
输入:n = 12 输出:3 解释:12 = 4 + 4 + 4
示例 2:
输入:n = 13 输出:2 解释:13 = 4 + 9
public class hot279 {
public int numSquares(int n) {
// dp[i] 表示和为 i 所需的最少完全平方数个数
int[] dp = new int[n + 1];
// 初始化 dp 数组
// 最坏情况下,每个数都由 1 相加而成,即 i 个 1
for (int i = 1; i <= n; i++) {
dp[i] = i; // 初始值设为 i(最坏情况)
// 遍历所有可能的完全平方数 j*j,其中 j*j <= i
for (int j = 1; j * j <= i; j++) {
// 状态转移方程:
// dp[i] = min(dp[i], dp[i - j*j] + 1)
// 表示:和为 i 的最少完全平方数个数 =
// min(当前值, 和为 (i-j*j) 的最少个数 + 1个 j*j)
dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
}
}
// 返回和为 n 的完全平方数的最少数量
return dp[n];
}
}

被折叠的 条评论
为什么被折叠?



