279. 完全平方数

给你一个整数 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 的最小完全平方数个数。

posted @   东岸  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示