完美平方
给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。
给出 n = 12
, 返回 3
因为 12 = 4 + 4 + 4
。
给出 n = 13
, 返回 2
因为 13 = 4 + 9
。
使用动态规划
class Solution {
public:
/**
* @param n a positive integer
* @return an integer
*/
int numSquares(int n) {
// Write your code here
int *dp = new int [n+1];
dp[0] = 0;
dp[1] = 1;
for(int i=2; i<=n; i++)
{
if(int(sqrt(i))*int(sqrt(i))==i)
{
dp[i] = 1;
continue;
}
int mincount = 0x7fffffff;
for(int j=1; j*j<=i; j++)
{
mincount = min(mincount, dp[j*j]+dp[i-j*j]);
}
dp[i] = mincount;
}
return dp[n];
}
};