279. 完全平方数

题目描述

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

示例 1:

输入: n = 12
输出: 3 

解释: 12 = 4 + 4 + 4.
示例 2:

输入: n = 13
输出: 2

解释: 13 = 4 + 9.

分析

使用动态规划
dp[i] = min{dp[i - j*j]}, 1<= j <= sqrt(i);
dp[0] = 0;
dp[1] = 1;

代码

class Solution {
public:
    int numSquares(int n) {
        if(n == 0) {
            return 0;
        }
        vector<int> dp(n + 1, 0);
        dp[1] = 1;
        for(int i = 2; i <= n; i++) {
            int min = INT_MAX;
            for(int j = 1; j * j <= i; j++) {
                int k = dp[i - j*j] + 1;
                if( k < min) {
                    min = k;
                }
            }
            dp[i] = min;
        }
        return dp[n];
    }
};

题目链接

https://leetcode-cn.com/problems/perfect-squares/description/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 8,779评论 0 0
  • 各校历年复试机试试题 清华、北大、华科试题详细笔记部分,少笔记部分与少数leetcode【含个人整理笔记】 一、详...
    医学工程与科学园地阅读 4,965评论 0 1
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,654评论 0 18
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,719评论 0 2