給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, …)使得它們的和等于 n。你需要讓組成和的完全平方數的個數最少。
示例 1:
輸入: n = 12
輸出: 3
解釋: 12 = 4 + 4 + 4.
解題思路
數組含義:dp[i]數字i對應組成和的完全平方數的個數最少
狀態轉移: dp[i]=Math.min(dp[i-jj]+1,dp[i]) 逐個取小于i的平方數,將i分解為一個不可切割的平方數和可分解成平方數的數字,去最小值。
初始化:將數組用最大值填充*
代碼
class Solution {public int numSquares(int n) {int[] dp=new int[n+1];Arrays.fill(dp,Integer.MAX_VALUE);dp[0]=0;for(int i=1;i<=n;i++)for(int j=1;j*j<=i;j++)dp[i]=Math.min(dp[i-j*j]+1,dp[i]);return dp[n];}
}