Leetcode--279. 完全平方数
給定正整數?n,找到若干個完全平方數(比如?1, 4, 9, 16, ...)使得它們的和等于 n。你需要讓組成和的完全平方數的個數最少。
示例?1:
輸入: n = 12
輸出: 3?
解釋: 12 = 4 + 4 + 4.
示例 2:
輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.
思路:這道題最直接的思路就是,要找到dp[n]的值,那就看他前面哪個位置可以加一個平方數直接到n,給可以一步到達n點的x點處的dp[x]的值加一即可
例如本題的第一個用例:dp[12],可以一步到12的有11,8,3
也就是取min(dp[11],dp[8],dp[3]),以此向前類推,求出結果
dp[0]=0,dp[1]=1;
動態轉移方程:dp[n] = min(dp[n-j*j]+1,dp[n])
提交的代碼:
class Solution {
? ? public int numSquares(int n) {
? ? ? ? int i,j;
?? ??? ?int[] dp = new int[n+1];
?? ??? ?dp[0] = 0;
?? ??? ?for(i=1;i<=n;i++)
?? ??? ?{
?? ??? ??? ?dp[i] = i;
?? ??? ??? ?for(j=1;i-j*j>=0;j++)
?? ??? ??? ?{
?? ??? ??? ??? ?dp[i] = java.lang.Math.min(dp[i-j*j]+1, dp[i]);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return dp[n];
? ? }
}
完整的代碼:
public class Solution279 {
?? ?public static int numSquares(int n) {
?? ??? ?int i,j;
?? ??? ?int[] dp = new int[n+1];
?? ??? ?dp[0] = 0;
?? ??? ?for(i=1;i<=n;i++)
?? ??? ?{
?? ??? ??? ?dp[i] = i;
?? ??? ??? ?for(j=1;i-j*j>=0;j++)
?? ??? ??? ?{
?? ??? ??? ??? ?dp[i] = java.lang.Math.min(dp[i-j*j]+1, dp[i]);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return dp[n];
? ? }
?? ?public static void main(String[] arga)
?? ?{
?? ??? ?int n = 12;
?? ??? ?System.out.println(numSquares(n));
?? ?}
}
?
總結
以上是生活随笔為你收集整理的Leetcode--279. 完全平方数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jsp四种范围对象
- 下一篇: Leetcode:892. 三维形体的表