题目:
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
函数代码:
class Solution {
public:
int numSquares(int n) {
if(n==0)
{
return 0;
}
//记得这里初始化要n+1,因为是求最小值,不能初始化为0,初始化为0,输出一直为0,因为0是最小的。
//初始值设定很重要,如果求最小,初始值就设定最大;如果求最大,初始值就设定最小。
vector<int>dp(n+1,n+1);
dp[0]=0;
dp[1]=1;
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];
}
};