时间复杂度(O( n^2))
class Solution {
public:
int numSquares(int n) {
int minCount=n;
numSearch(n,0,minCount);
return minCount;
}
void numSearch(int n,int count,int &minCount) {
if(count>=minCount)return ;
int sqrt_n = (int)sqrt(n);
if(sqrt_n*sqrt_n==n){
if(count+1<minCount)
minCount=count+1;
}else
for(int i=sqrt_n;i>0;--i)
numSearch(n-i*i,count+1,minCount);
}
};
时间复杂度(O( n*sqrt(n)))
class Solution {
public:
int numSquares(int n) {
vector<int> cnt(n+1, INT_MAX);
cnt[0] = 0;
for (int i = 1; i <= n; ++i)
for (int j = 1; j*j <= i; ++j)
cnt[i] = min (cnt[i], cnt[i-j*j]+1);
return cnt.back();
}
};