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.
Subscribe to see which companies asked this question
class Solution {
public:
int numSquares(int n) {
vector<int> trySquareList;
vector<int> auxVtr(n+1);
auxVtr[0] = 0;
auxVtr[1] = 1;
trySquareList.push_back(1);
for (int i=2; i<=n; i++)
{
int tryItem = trySquareList.back()+1;
if (tryItem*tryItem <= i)
trySquareList.push_back(tryItem);
int minNum = i;
for (int j=0; j<trySquareList.size(); j++)
{
int squareItem = trySquareList[j];
int tryingIdx = i- squareItem*squareItem;
if (tryingIdx >= 0)
{
minNum = min(minNum, auxVtr[tryingIdx]+1);
}
}
auxVtr[i] = minNum;
}
return auxVtr[n];
}
};