题目如下:
Given a positive integer n, find the least number of perfect square numbers (for example, 1,
4, 9, 16, ...
) which sum to n.
For example, given n = 12
, return 3
because 12
= 4 + 4 + 4
; given n = 13
, return 2
because 13
= 4 + 9
.
解决代码如下(动态规划):
int numSquares(int n) {
vector<int> result(n + 1, 0);
for (int i = 0; i <= n; i++) {
result[i] = i;
for (int l = 2; l <= sqrt(i); l++) {
if (result[i] > result[i - l * l] + 1)
result[i] = result[i - l * l] + 1;
}
}
return result[n];
}