LeetCode 279 Perfect Squares (Tags:DP)

2021-07-23 11:29:40 浏览数 (3)

LeetCode 279 Perfect Squares

1.问题描述

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

Example 1: Input: n = 12 Output: 3 Explanation: 12 = 4 4 4.

Example 2: Input: n = 13 Output: 2 Explanation: 13 = 4 9.

翻译过来就是给定一个数,找到一组完全平方数,其和等于给定的数。而且要求这一组完全平方数的个数最少。

2. 思路

  • 定义dp[] 数组,dp[i]表示 给定i时perfect square 的数目。
  • dp[0] = 0
  • dp[1] = dp[0] 1
  • dp[2] = dp[1] 1
  • dp[3] = dp[2] 1
  • dp[4] = Min{dp[4 - 1 * 1] 1 , dp[4 - 2 * 2] 1} = 1
  • dp[5] = Min{dp[5 - 1 * 1] 1, dp[5 - 2 * 2] 1} = 2
  • dp[n] = Min{dp[n - 1 * 1] 1, dp[n - 2 * 2] 1, ...}

3. 代码

代码语言:javascript复制
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) {
           int min = Integer.MAX_VALUE;
           int j = 1;
           while(i - j * j >= 0) {
               min = Math.min(min, dp[i - j * j]   1);
                 j;
           }
           dp[i] = min;
       }
       return dp[n];
   }

}

0 人点赞