最小平方和等于给定n的平方数
思路很简单,我们从1开始,一直到一个平方小于或等于n的数,对于每一个x, n-x都会循环。
递归写法公式
min(res,1+getMinSquare(n-temp)),temp=x*x;
int getMinsquare(int n)
{
if(n<=3)
{
return n;
}
int res=n;
for(int i=1;i<=n;i++)
{
int temp=i*i;
if(temp>n)
{
break;
}
else {
res=min(res,1+getMinsquar(n-temp));
}
}
return res;
}
动态规划写法
int getMinSquares(int n)
{
int *dp = new int[n+1];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
for (int i = 4; i <= n; i++)
{
dp[i] = i;
for (int x = 1; x <= i; x++) {
int temp = x*x;
if (temp > i)
break;
else dp[i] = min(dp[i], 1+dp[i-temp]);
}
}
int res = dp[n];
delete [] dp;
return res;
}