//也可以用队列,下次再看
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n, n);
dp[0] = 1;
for (int i=1; i<n; i++){//dp[i],i+1的结果
if (sqrt(i+1) == (int)sqrt(i+1)) dp[i] = 1;
else{
for (int k =1; k*k<(i+1); k++ ){
dp[i] = min(dp[i], dp[i-k*k]+1);
}
}
}
return dp[n-1];
}
};