思路:动态规划。
class Solution {
public:int numSquares(int n) {
//判错
if(n<=0) return 0;
int *dp=new int[n];
//初始化
for(int i=0;i<n;i++){
dp[i]=n;
}
for(int k=1;;k++){
int square_k=k*k;
if(square_k>n){
break;
}
dp[square_k-1]=1;
}
//动态递推
for(int i=0;i<n-1;i++){
for(int k=1;;k++){
int squre_k=k*k;
int j=i+squre_k;
if(j>=n){
break;
}
int new_n=dp[i]+1;
if(new_n<dp[j]){
dp[j]=new_n;
}
}
}
//结果
int res=dp[n-1];
delete []dp;
return res;
}
};