2023.8.18
与零钱兑换相似,本题属于完全背包问题:完全平方数为物品,整数n为背包。
直接上代码:
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1 , INT_MAX);
dp[0] = 0;
for(int i=1; i*i<=n; i++)
{
for(int j=i*i; j<=n; j++)
{
dp[j] = min(dp[j] , dp[j-i*i]+1);
}
}
return dp[n];
}
};