LeetCode 279. 完全平方数(Perfect Squares)

Posted FlyingWarrior

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 279. 完全平方数(Perfect Squares)相关的知识,希望对你有一定的参考价值。

题目描述

 

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

示例 1:

输入: n = 12
输出: 3 
解释: 12 = 4 + 4 + 4.

示例 2:

输入: n = 13
输出: 2
解释: 13 = 4 + 9.

 

解题思路

 

利用动态规划思想解题,初始化dp数组令小于n的完全平方数为1,从1到n遍历求解最小组成个数,再对每个数遍历小于其的所有完全平方数,最小组成个数的状态转移方程为:

dp[i] = min(dp[i], dp[i - j * j] + 1)

 

代码

 

 1 class Solution {
 2 public:
 3     int numSquares(int n) {
 4         vector<int> dp(n + 1, INT_MAX);
 5         for(int i = 1; i * i <= n; i++)
 6             dp[i * i] = 1;
 7         for(int i = 1; i <= n; i++)
 8             for(int j = 1; j * j < i; j++)
 9                 dp[i] = min(dp[i], dp[i - j * j] + 1);
10         return dp[n];
11     }
12 };

 

以上是关于LeetCode 279. 完全平方数(Perfect Squares)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 279. Perfect Squares 完全平方数(中等)

Leetcode 279.完全平方数

[Leetcode]279.完全平方数

图解leetcode279 —— 完全平方数

leetcode 279. 完全平方数----完全背包的套路

LeetCode 279. 完全平方数 / 牛客:多多的数字组合 / 多多的字符变换