题目279:完全平方数

示例1:
输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.
输入: n = 13
输出: 2
解释: 13 = 4 + 9.
动态规划问题,我是首先手动列出来前几个数字的输入输出:
输入 输出 解释
n=1, 1, 1
n=2, 2, 1,1
n=3, 3, 1,1,1
n=4, 1, 4
n=5, 2, 4,1
n=6, 3, 4,1,1
n=7, 4, 4,1,1,1
n=8, 2, 4,4
n=9, 1, 9
dp[0]=0;
dp[i]=min(dp[i-i之前的完全平方和]+1);
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1, INT_MAX);
dp[0] = 0;
for (int i = 1; i <=n; ++i) {
// 使用tem少进行一次乘法运算
for (int j = 1, tem = 0; tem = j * j, tem <= i; ++j) {
dp[i] = min(dp[i], dp[i-tem] + 1);
}
}
return dp[n];
}
};