Perfect Squares
来源:互联网 发布:权然后知轻重 编辑:程序博客网 时间:2024/06/05 06:10
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...
) which sum to n.
For example, given n = 12
, return 3
because 12 = 4 + 4 + 4
; given n = 13
, return 2
because 13 = 4 + 9
.
分析:
O(n)解法,
http://bookshadow.com/weblog/2015/09/09/leetcode-perfect-squares/
https://leetcode.com/discuss/56982/o-sqrt-n-in-ruby-and-c
据说是数论,然而并不懂
int numSquares(int n) { while (n % 4 == 0) n /= 4; if (n % 8 == 7) return 4; for (int a=0; a*a<=n; ++a) { int b = sqrt(n - a*a); if (a*a + b*b == n) return !!a + !!b; } return 3;}O(n*sqrt(n))解法:
动态规划,还是可以接受的
dp[i]凑成i的所需的平方数数字的最小个数;
初始化:初始化dp数组为无穷大,dp(i*i)=1,其中:i*i <= n
状态转移方程:dp[i+j*j] = min(dp[i+j*j], dp[i] + 1);怎么推到出来的呢o(╯□╰)o
动态规划方程推导:
第一,确定最优化子问题
第二,定义问题解集合,确定维度的明确含义定义
第三,分析分治策略,并确定最优化子解归结为原问题的方法 - 转移方程出自这里
第四,初始化简单解
第五,确定推导顺序
第六,在结果集中寻找问题解。
动态规划的设计除了上述标准过程外,其他就需要因题目的不同而灵活运用,尤其是第一项和第二项尤为重要。还不是很懂o(╯□╰)o刷完leetcode再好好研究
http://blog.csdn.net/thisinnocence/article/details/41073275
0 0
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- Perfect Squares
- <PY>转换类型:嵌套列表的遍历
- 本地事务异步恢复机制实现多数据源最终一致性
- HDU5481求数轴的并集的长度
- qt 委托 paint() 显示数据
- hdu 5486 Difference of Clustering 2015多校联合训练赛
- Perfect Squares
- hdu 5493 Queue 贪心+线段树
- hdu 541 The Next 位枚举
- 帝国备份王放到空间以后打开index.php显示空白页,解决办法
- Android Api Demos登顶之路(八十三)Graphics-->Point
- SEO优化图片方法
- 十一第一题Single Number
- 8种Nosql数据库系统对比
- hdu 5478 Can you find it 测试