1. 题目
2. 思路
(1) 动态规划
- dp[i]表示和为i的完全平方数的最少数量,则可以枚举[1,根号i]的所有数字,对于数字j来说,dp[i]=dp[i-j*j]+1。
- 对于每一个数字i,都要遍历其所有的[1,根号i],保证dp[i]是最少数量的。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public int numSquares(int n) {
int[] dp = new int[n + 1];
for (int i = 1; i <= n; i++) {
int min = Integer.MAX_VALUE;
for (int j = 1; j * j <= i; j++) {
min = Math.min(min, dp[i - j * j]);
}
dp[i] = min + 1;
}
return dp[n];
}
}