链接:
https://leetcode-cn.com/problems/perfect-squares/
解题思路:
这个题用动态规划做的,时间比其它方法长。
class Solution {
public:
int numSquares(int n)
{
int maxNum = static_cast<int>(sqrt(n) + 0.000001);
vector<int> square(maxNum + 1);
for (size_t i = 0; i <= maxNum; i++) {
square[i] = i * i;
}
vector<int> dp;
dp.assign(n + 1, 0);
for (int i = static_cast<int>(square.size()) - 1; i > 0; i--) {
dp[square[i]] = 1;
int maxCheck = n - square[i];
for (int j = 0; j <= maxCheck; j++) {
if (dp[j]) {
if (!dp[j + square[i]]) {
dp[j + square[i]] = dp[j] + 1;
} else {
dp[j + square[i]] = min(dp[j] + 1, dp[j + square[i]]);
}
}
}
}
return dp[n];
}
};
看一下别人的思路,这应该是个数学定理。