leetcode279,
Perfect Squares
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
.
class Solution {
public:
int numSquares(int n) {
if (n <= 0)
{
return 0;
}
if ((int)sqrt(n) == sqrt(n))
{
return 1;
}
vector<int> result(n + 1, INT_MAX);
for (int i = 0; i * i <= n; ++i)
{
result[i * i] = 1;
}
for (int i = 0; i <= n; ++i)
{
for (int j = 0; i + j * j <=n; ++j)
{
result[i + j * j] = min(result[i] + 1, result[i + j * j]);
}
}
return result[n];
}
};