import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int numSquares (int n) {
// write code here
int[] dp = new int[n + 1]; // dp[i] 表示的是 i 最少个数的完全平方数,使得这些完全平方数的和等于 i
for (int i = 1; i <= n; i++) {
if (Math.pow((int) Math.sqrt(i), 2) == (double)i) {
dp[i] = 1;
}
else {
dp[i] = Integer.MAX_VALUE;
for (int j = (int) Math.sqrt(i); j >= 1; j--) {
int tmp = (int) (i - Math.pow(j, 2));
dp[i] = Math.min(dp[i], dp[tmp] + 1);
}
}
}
return dp[n];
}
}