完美平方
题目
给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, … )使得他们的和等于 n。你需要让平方数的个数最少。
样例
给出 n = 12, 返回 3 因为 12 = 4 + 4 + 4。
给出 n = 13, 返回 2 因为 13 = 4 + 9。题解
所有的数都可以看做一个非平方数加上一个平方数。从小到大计算dp[n]=a+b*b,递推公式为dp[a + b * b] = Math.min(dp[a] + 1, dp[a + b * b]),因为a+b*b可能本身就是平方数,所以要取较小的。
public class Solution {
/**
* @param n a positive integer
* @return an integer
*/
public int numSquares(int n) {
int[] dp = new int[n+1];
Arrays.fill(dp, Integer.MAX_VALUE);
for(int i = 0; i * i <= n; i++)
{
dp[i * i] = 1;
}
for(int a = 0; a <= n; a++)
{
for(int b = 0; a + b * b <= n; b++)
{
dp[a + b * b] = Math.min(dp[a] + 1, dp[a + b * b]);
}
}
return dp[n];
}
}
Last Update 2016.11.29