Leetcode 279:完全平方数即类似题(动态规划求最小值或最大值)
来源
动态规划
对于数n,n=m*m+(n-m*m), f(n)表示和为n的完全平方数的最少数量,则f(n) =1+f(n-m*m)
建立一个长度为n+1的表,记录每一个f(i)
$i = {j^2} + (i - {j^2})$,其中$j < = \sqrt i $
$f(i) = 1 + f(i - {j^2})$
$\min f(i) = 1 + \min f(i - {j^2})$
1 class Solution { 2 public int numSquares(int n) { 3 int[] f = new int[n+1]; //f[i]表示 4 f[0] = 0; 5 6 //填表f 7 for(int i = 1; i){ 8 //对于每一个f[i] 9 int minn = Integer.MAX_VALUE; 10 for(int j = 1; j*j <= i; j++){ 11 minn = Math.min(minn, f[i-j*j]); 12 } 13 f[i] = minn + 1; 14 } 15 return f[n]; 16 } 17 }
类似题:
300:最长递增子序列
322:零钱兑换