给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
示例 1:
输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.
示例 2:
输入: n = 13
输出: 2
解释: 13 = 4 + 9.
思路:
方法一:递归
class Solution {
public int numSquares(int n) {
if(n==0) return 0;
int ans=Integer.MAX_VALUE;
for(int i=1;i*i<n;i++)
ans=Math.min(ans, n/(i*i)+numSquares(n-n/(i*i)*(i*i)));
return ans;
}
}
方法二:动态规划
class Solution {
public int numSquares(int n) {
if(n==0) return 0;
int[] dp=new int[n+1];
for(int i=1;i<=n;i++)
{
dp[i]=i;
for(int j=1;i-j*j>=0;j--)
dp[i]=Math.min(dp[i], dp[i-j*j]+1);
}
return dp[n];
}
}
本文探讨了如何将一个正整数n表示为最少数量的完全平方数之和的方法。通过递归和动态规划两种算法实现,举例说明了对于特定输入如12和13时的最优解。
&spm=1001.2101.3001.5002&articleId=101843175&d=1&t=3&u=8fa19c1da64b477085b9c2bc8fff0411)
285

被折叠的 条评论
为什么被折叠?



