题目链接:点这里
使用方法: 动态规划
这里假设F(0)到F(n - 1)均为最优答案, 那么
F
(
n
)
=
m
i
n
(
F
(
n
)
,
F
(
n
−
i
2
)
+
1
)
,
i
2
<
n
F(n)=min(F(n), F(n -i^2) + 1),i^2<n
F(n)=min(F(n),F(n−i2)+1),i2<n
class Solution {
public:
int numSquares(int n) {
if (n == 1) return 1;
vector<int> v(n + 1, INT_MAX);
v[0] = 0;
for (int i = 1; i * i <= n; i++) {
int t = i * i;
for (int j = t; j <= n; j++) {
v[j] = min(v[j], v[j - t] + 1);
}
}
return v[n];
}
};