题目:
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, …) which sum to n.
这道题我最开始的做法是先让n减去最大的小于n的平方数,然后统计,发现行不通,考虑了半天发现没太好的思路,就参考了一下这位老哥的思路:
https://blog.csdn.net/qq_35481167/article/details/82817699
他是使用的动态规划来求解。求出所有小于n的数的可能结果。
class Solution {
public:
int numSquares(int n) {
vector<int>dp(n+1, INT_MAX);
dp[0] = 0;
for(auto i = 0; i <= n; i++)
for(auto j = 1; i + j * j <= n; j++){
dp[i + j * j] = min(dp[i + j * j], dp[i] + 1);
}
return dp[n];
}
};```