Perfect Squares - LeetCode 279
2015-10-05 16:41
459 查看
Given a positive integer n, find the least number of perfect square numbers (for example,
For example, given n =
return
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Hide Tags
Dynamic Programming Breadth-first
Search Math
Hide Similar Problems
(E) Count Primes (M)
Ugly Number II
分析:
给定一个整数k,分解成x + y*y 的形式,由于y*y是完全平方数,那么只需求出x的完全平方数个数,再加上1,就是k的完全平方数个数,但是如果x+y*y自身就是完全平方数,那么最小值应该是1,所以应该去两者中较小者。
不难看出,此题涉及大量重复计算,所以考虑动态规划方法。首先n以内的完全平方数的最少完全平方数个数均为为1,而为了后期迭代计算时方便比较大小,故将非完全平方数的最小完全平方数个数初始化为最大整数。
然后基于x+y*y公式,从小到大依次迭代计算每个整数的最小完全平方数个数,最后返回结果即可。
时间复杂度O(n^2),空间O(n)。
1, 4, 9, 16, ...) which sum to n.
For example, given n =
12,
return
3because
12 = 4 + 4 + 4; given n =
13, return
2because
13 = 4 + 9.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Hide Tags
Dynamic Programming Breadth-first
Search Math
Hide Similar Problems
(E) Count Primes (M)
Ugly Number II
分析:
给定一个整数k,分解成x + y*y 的形式,由于y*y是完全平方数,那么只需求出x的完全平方数个数,再加上1,就是k的完全平方数个数,但是如果x+y*y自身就是完全平方数,那么最小值应该是1,所以应该去两者中较小者。
不难看出,此题涉及大量重复计算,所以考虑动态规划方法。首先n以内的完全平方数的最少完全平方数个数均为为1,而为了后期迭代计算时方便比较大小,故将非完全平方数的最小完全平方数个数初始化为最大整数。
然后基于x+y*y公式,从小到大依次迭代计算每个整数的最小完全平方数个数,最后返回结果即可。
时间复杂度O(n^2),空间O(n)。
///////////////////540ms///////////////////////////// class Solution { public: int numSquares(int n) { vector<int> dp(n+1,INT_MAX); //非完全平方数的平方数个数初始化为无穷大 for(int i = 0; i*i <= n; i++) dp[i*i] = 1; //平方数最少只需要1个完全平方数 for(int x = 0; x <= n; x++){ for(int y = 0;x+y*y <= n; y++){ dp[x + y*y] = min(dp[x] + 1,dp[x + y * y]); } } return dp ; } };
相关文章推荐
- js日期格式化函数
- Node.js Request Module…sending json in body for api request with put
- 快速排序之JavaScript实现
- HTML <input type='file'> File Selection Event
- How can I get file extensions with JavaScript?
- js页面滚动浮动层智能定位(jQuery)实例页面
- HTML5权威指南--标签新变化,文件API,拖放API(简要学习笔记一)
- Jquery .each()
- 特殊字符导致用正则表达式进行字符串替换失败,Java replaceAll()方法报错Illegal group reference
- html跑马灯代码大全(图片文字移动代码)
- 堆排序之JavaScript实现
- 关于json格式转换为.xls .mdb的终极解决方案
- [九度OnlineJudge][剑指Offer]题目1519:合并两个排序的链表
- 10 个 Node.js 常见面试题
- Bootstrap 导航栏和登陆框
- [LeetCode][JavaScript]Set Matrix Zeroes
- Bootstrap CSS——Button&Img
- 关于JS操作DOM的一些小细节
- JS跨域常见方案
- 一步一步学jQuery(六)