// 5.21
// Perfect Squares
// Given a positive integer n,
// find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.
// For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.
tips:也就是说任意一个正整数都可以由若干个正整数的平方和组合而成,具体原理不知
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++) {
int min = Integer.MAX_VALUE;
int idx = 1;
while (i - idx * idx >= 0) {
min = Math.min(dp[i - idx * idx] + 1, min);
idx++;
}
dp[i] = min;
}
return dp[n];
}