题解
很多解法,包括不限于dfs,dp,甚至数学解法(最快)。
给出dp解法
dp [ i ] : 代表对 i 拥有的最少平方和数量。
易得
dp[ i ] = min{ dp[ i - k*k ] | k= 1,2,3… && k*k <= i }
Code
class Solution {
public:
int dp[10000]={0};
int numSquares(int n) {
for(int i=1;i<=n;i++){
dp[i] = 9999999;
for(int j=1;j*j<=i;j++)
dp[i]=min(dp[i],dp[i-j*j]+1);
}
return dp[n];
}
};