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
.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Difficulty:Medium
状态转移方程:nums[i] = min(nums[i],nums[j*j]+nums[i-j*j]);
class Solution {
public:
int numSquares(int n) {
vector<int> nums;
nums.push_back(0);
for(int i = 1;i<=n;i++)
{
nums.push_back(nums[i-1]+1);
for(int j = 1;j*j<=i;j++)
{
if(j*j==i)
nums[i]=1;
nums[i] = min(nums[i],nums[j*j]+nums[i-j*j]);
}
}
return nums[n];
}
};