【力扣hot100题】(083)完全平方数
想了一会,其实动态规划题只需要往状态转换方程想就好了。
最开始的想法是构建词典记录一直到n的平方数,然后用数组记录从1到n的完全平方数的最小数,每次变量一遍词典,比如n为9就分别遍历比较第9-3*3个数的完全平方数的最小数,第9-2*2个数的完全平方数的最小数,第9-1*1个数的完全平方数的最小数……每次取最小的那个加一。
优化掉字典就是这样:
class Solution {
public:
int numSquares(int n) {
int pre[10001];
pre[0]=0;
pre[1]=1;
for(int i=2;i<=n;i++){
pre[i]=i;
for(int j=0;j*j<=i;j++) pre[i]=min(pre[i-j*j]+1,pre[i]);
}
return pre[n];
}
};