leetcode之Perfect Squares
2015-12-03 22:29
344 查看
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.
题目描述:给定一个正整数n,找到最少的平方数使得和为n
思路:采用动态规划的解法,设dp[i]表示组成i的最少平方数的个数,则可以得到如下的递推关系式:
dp[i] = min(dp[i-j*j]+1), j的范围为:[i,sqrt(i)]
代码如下:
当然,也有数学的找规律的方法,代码如下:
For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.
题目描述:给定一个正整数n,找到最少的平方数使得和为n
思路:采用动态规划的解法,设dp[i]表示组成i的最少平方数的个数,则可以得到如下的递推关系式:
dp[i] = min(dp[i-j*j]+1), j的范围为:[i,sqrt(i)]
代码如下:
class Solution { public: int numSquares(int n) { vector<int>dp(n+1,n+1); dp[0] = 0; for(int i = 1; i <=n; ++i){ for(int j = 1; j <=sqrt(i); ++j){ dp[i] = min(dp[i],dp[i-j*j]+1); } } return dp ; } };
当然,也有数学的找规律的方法,代码如下:
class Solution { public: int is_square(int n){ int temp = (int) sqrt(n); return temp * temp == n; } int numSquares(int n) { while ((n & 3) == 0) //n%4 == 0 n >>= 2; if ((n & 7) == 7) return 4; //n % 8 == 7 if(is_square(n)) return 1; int sqrt_n = (int) sqrt(n); for(int i = 1; i<= sqrt_n; i++){ if (is_square(n-i*i)) return 2; } return 3; } };
相关文章推荐
- C# 解析JSON格式数据
- JavaScript设计模式 - 迭代器模式
- 【bzoj1822】[JSOI2010] Frozen Nova 冷冻波
- jqueryHTML相关方法
- CoffeeScript ------ 问号
- jquery 生成表格,拆分,合并
- Bootstrap简介及Bootstrap里的栅格系统col-md/sm/xs-x;
- jstack和线程dump分析
- 盒布局和多栏布局
- div+css3中id和class的命名
- angular学习
- $.extend()和(function($){….})(jQuery)
- javascript代码注意事项
- HTML静态网页 格式与布局
- JSR-303规范,Bean Validation
- JSR 303 - Bean Validation 介绍及最佳实践
- [ruby]Rails中使用bootstrap
- dedecms织梦特定条件下,隐藏特定栏目的方法,通过css实现
- 一些漂亮的js库
- AngularJS之页面跳转Route