给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。
示例 1:
输入:n = 12
输出:3
解释:12 = 4 + 4 + 4
示例 2:
输入:n = 13
输出:2
解释:13 = 4 + 9
class Solution {
public:
int numSquares(int n) {
vector<int>dp(n+1,n);
dp[0]=0;
for(int i=1;i<n+1;i++)
{
for(int j=0;j*j<=i;j++){
dp[i]=min(dp[i],dp[i-j*j]+1);
}
}
return dp[n];
}
};
创建一个长度为 n+1 的向量 dp,其中 dp[i] 表示和为 i 的最小完全平方数个数。
首先将 dp 向量初始化为 n,因为任何正整数都可以表示为至多 n 个完全平方数之和。然后我们将 dp[0] 设为 0,因为 0 的最小完全平方数个数为 0。
接下来,遍历从 1 到 n 的所有整数。对于每个整数 i,找到所有小于或等于 i 的完全平方数 j^2,并更新 dp[i] 为 dp[i] 和 dp[i - jj] + 1 中的较小值。这是因为如果我们可以用 dp[i - jj] 个完全平方数表示 i - jj,那么我们只需要再加一个 jj(也就是dp[i-j*j]+1) 就可以表示 i。
最终,我们返回 dp[n],即和为 n 的最小完全平方数个数。
标签:平方,int,整数,完全,jj,279,dp From: https://www.cnblogs.com/donghao99/p/18197527