鏈接:
https://leetcode-cn.com/problems/perfect-squares/
解題思路:
這個(gè)題用動(dòng)態(tài)規(guī)劃做的馏慨,時(shí)間比其它方法長仆救。
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];
}
};
看一下別人的思路,這應(yīng)該是個(gè)數(shù)學(xué)定理。