动态规划
计算从1开始到n的每个数,他们各自最少可以由几个完全平方数组成。
class Solution {
public int numSquares(int n) {
int[] dp = new int[n + 1];
dp[0] = 0;
for (int num = 1; num <= n; num++) {
int minDiff = Integer.MAX_VALUE;
for (int i = 1; (num - i * i) >= 0; i++) {
minDiff = Math.min(minDiff, dp[num - i * i]);
}
dp[num] = minDiff + 1;
}
return dp[n];
}
}