leetcode 279. Perfect Squares
来源:互联网 发布:win7 java 编辑:程序博客网 时间:2024/05/16 09:22
DP问题。
题意:
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
.
题解:写出状态转移方程,
dp[n]=min{dp[n-i*i]}+1,其中i>=1&&i<=sqrt(n)。
代码如下:
class Solution {public: int numSquares(int n) { vector<int> dp(n+1); dp[0]=0; dp[1]=1; int min; for(int i=2;i<=n;i++){ min=INT_MAX; for(int j=sqrt(i);j>=1;j--){ if(dp[i-j*j]<=min) min=dp[i-j*j]; } dp[i]=min+1; } return dp[n]; }};
击败了56%的cpp提交者。
下面贴一下某大牛写的12ms的代码。
class Solution {public: int numSquares(int n) { /*** first: you must initialize the dp-array ***/ static vector<int> dp({0}); /*** the-array-start-from-1 ***/ if(dp.size() >= n+1) return dp[n]; /*** dp[n] means the dp.size()=n+1 ***/ while(dp.size()<=n+1){ /*** the-j-should-start-from-1 ***/ int temp=INT_MAX; for(int j=1; j*j<=dp.size(); j++) temp=min(temp, dp[dp.size()-j*j]+1); dp.push_back(temp); } return dp[n]; }};
0 0
- [leetcode] 279. Perfect Squares
- 279. Perfect Squares LeetCode
- leetcode 279. Perfect Squares
- leetcode 279. Perfect Squares
- [LeetCode]279. Perfect Squares
- LeetCode-279.Perfect Squares
- LeetCode *** 279. Perfect Squares
- leetcode.279. Perfect Squares
- LeetCode 279. Perfect Squares
- [leetcode] 279. Perfect Squares
- Leetcode-279. Perfect Squares
- LeetCode 279. Perfect Squares
- Leetcode 279. Perfect Squares
- [LeetCode]279. Perfect Squares
- 【LeetCode】 279. Perfect Squares
- (LeetCode) 279. Perfect Squares
- LeetCode 279. Perfect Squares
- LeetCode#279. Perfect Squares
- MapReduce中的分区方法Partitioner
- 类View
- 高性能WEB开发之Web性能测试工具推荐
- nginx源码初读(4)--让烦恼从数据结构开始(ngx_str)
- runOnUiThread使用实例
- leetcode 279. Perfect Squares
- RYU应用程序API详解
- Dungeon Master
- Android Browser源码分析(二)BrowserActivity初始化
- iOS绘图教程
- 可以让你掌握安卓开发环境部署比预期要好的5种方法
- 数据库知识
- MySQL存储过程详解
- 在Ubuntu下给PyCharm创建快捷方式