1. 程式人生 > 實用技巧 >LeetCode#279-完全平方數

LeetCode#279-完全平方數

/*
279. 完全平方數
給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。

示例 1:

輸入: n = 12
輸出: 3
解釋: 12 = 4 + 4 + 4.
示例 2:

輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.
         思路:
             標籤:動態規劃
             首先初始化長度為n+1的陣列dp,每個位置都為0
             如果n為0,則結果為0
             對陣列進行遍歷,下標為i,每次都將當前數字先更新為最大的結果,即dp[i]=i,比如i=4,最壞結果為4=1+1+1+1即為4個數字
             動態轉移方程為:dp[i] = MIN(dp[i], dp[i - j * j] + 1),i表示當前數字,j*j表示平方數
             時間複雜度:O(n*sqrt(n)),sqrt為平方根

 */
public class p279 {
    public int numSquares(int n) {
        int dp[]=new int[n+1];
        for(int i=1;i<=n;i++){
            dp[i]=i;//最壞情況下n個1組成
            for(int j=1;j*j<=i;j++){
                dp[i]=Math.min(dp[i],dp[i-j*j]+1);
            }
        }
        return dp[n];

    }
}

  執行結果: