给定正整数 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];}
}