LeetCode#279-完全平方數
阿新 • • 發佈:2020-09-08
/* 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]; } }
執行結果: