码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-05 21:48:53      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:需要   16px   ali   min   最小   动态规划   center   text   描述   

题目描述

 

给定正整数 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)

标签:需要   16px   ali   min   最小   动态规划   center   text   描述   

原文地址:https://www.cnblogs.com/wmx24/p/9593919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!