前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 279 Perfect Squares (Tags:DP)

LeetCode 279 Perfect Squares (Tags:DP)

作者头像
用户7447819
发布2021-07-23 11:29:40
2530
发布2021-07-23 11:29:40
举报
文章被收录于专栏:面试指北面试指北

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];
   }

}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面试指北 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LeetCode 279 Perfect Squares
    • 1.问题描述
      • 2. 思路
        • 3. 代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档