题目链接:279. 完全平方数 - 力扣(LeetCode)
题目解法:
public static int numSquares(int n){
int[] ans=new int[n+1];//动态规划
for (int i=1;i<=n;i++){//看小于等于n的每个数字最少有几个完全平方个数加和
int tmp=Integer.MAX_VALUE;
for (int j=1;j*j<=i;j++){
tmp=Math.min(tmp,ans[i-j*j]);//一步一步取值到n(取 上一个数的最少平方数 和 减去j*j后的那个数的最少平方个数 的最小值)
}
ans[i]=tmp+1;//该数的最少平方数要在此基础上加一(因为上述最小值是缺一个数再加和才得该数)
}
return ans[n];//返回n的最少完全平方个数
}
测试用例:
System.out.println(numSquares(12));
运行结果:
3
Process finished with exit code 0