本题和零钱兑换 1 十分类似 ,只是物品变了,物品变成了 i * i
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 - i * i] + 1, dp[j]);
}
return dp[n];
}
};