文章目录
力扣279完全平方数
class Solution {
public:
int numSquares(int n) {
vector<int> f(n + 1, 1e8);
// 因为迭代方程为f[j] = min(f[j], f[j - i * i] + 1);
// 故需要考虑f[0]的值
// f[i]的含义为和为i的完全平方数量
// 显然,f[0] = 0
f[0] = 0;
// 第一维度:物品
for (int i = 1; i <= n; i ++ )
// 第二维度:背包体积,完全背包问题的背包只要合法遍历即可
// 所以这里可以把if判断和for循环合并
// j的初始值为i * i
for (int j = 1; j <= n; j ++ )
{
if (j >= i * i)
f[j] = min(f[j], f[j - i * i] + 1);
}
return f[n];
}
};