
class Solution {
public:
int numSquares(int n) {
//初始化vector<int> dp[i]=i i=[0,n];
//状态转移方程 dp[i]=min(dp[i],dp[i-j*j]+1) i-j*j>=0 && j=0, j++;
//time O(nsqrt(n)) space O(1);
vector<int> dp;
for(int i=0;i<=n;i++){
dp.push_back(i);
}
for(int i=1;i<=n;i++){
for(int j=1;i-j*j>=0;j++){
dp[i]=min(dp[i],dp[i-j*j]+1);
}
}
return dp[n];
}
};