DP问题:leetcode(279)Perfect Squares
2018-01-25 09:41
351 查看
问题描述:
Given a positive integer n, find the least number of perfect square numbers (for example,
For example, given n =
emm.......感觉做这种涉及整数性质的题没什么灵感,总是找不到其中一些规律。无奈又是利用较为暴力的O(N^2)动态规划解决问题了。对于这种类型的问题以后还是先自己用较为粗糙的方式AC掉,再去看别人巧妙的解法吧,以免浪费过多的时间。
主要思路:设a[i]为整数i为perfect square numbers,那么i可以拆成两个数相加,设这两个数是j和k,即i=j+k,则a[i] = min { a[j]+a[k] }。注意j从1遍历到i-1会超时,实际上只用遍历到i/2就可以了。另外还要考虑一种特殊情况,就是当i为平方数的时候,需要直接返回1.
#include<iostream>
#include<vector>
#include<cstring>
#include<cmath>
using namespace std;
class Solution {
public:
int numSquares(int n) {
int a[10000];
a[1]=1;
int k,min,sqrn;
for(int i=2;i<=n;i++){
sqrn=sqrt(i);
if(sqrn*sqrn==i) a[i]=1;
else{
min=a[i-1]+1;
for(int j=1;j<=i/2;j++){
min=a[j]+a[i-j]<min?a[j]+a[i-j]:min;
}
a[i]=min;
}
}
return a
;
}
};
int main()
{
cout<<(new Solution())->numSquares(6405);
}
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
3because
12 = 4 + 4 + 4; given n =
13, return
2because
13 = 4 + 9.
emm.......感觉做这种涉及整数性质的题没什么灵感,总是找不到其中一些规律。无奈又是利用较为暴力的O(N^2)动态规划解决问题了。对于这种类型的问题以后还是先自己用较为粗糙的方式AC掉,再去看别人巧妙的解法吧,以免浪费过多的时间。
主要思路:设a[i]为整数i为perfect square numbers,那么i可以拆成两个数相加,设这两个数是j和k,即i=j+k,则a[i] = min { a[j]+a[k] }。注意j从1遍历到i-1会超时,实际上只用遍历到i/2就可以了。另外还要考虑一种特殊情况,就是当i为平方数的时候,需要直接返回1.
#include<iostream>
#include<vector>
#include<cstring>
#include<cmath>
using namespace std;
class Solution {
public:
int numSquares(int n) {
int a[10000];
a[1]=1;
int k,min,sqrn;
for(int i=2;i<=n;i++){
sqrn=sqrt(i);
if(sqrn*sqrn==i) a[i]=1;
else{
min=a[i-1]+1;
for(int j=1;j<=i/2;j++){
min=a[j]+a[i-j]<min?a[j]+a[i-j]:min;
}
a[i]=min;
}
}
return a
;
}
};
int main()
{
cout<<(new Solution())->numSquares(6405);
}
相关文章推荐
- [leetcode] 279 Perfect Squares(DP,四平方和定理)
- [Leetcode] #279 Perfect Squares (BFS, DP)
- DP问题:leetcode(264) Ugly Number II
- 每日AC--LeetCode-Triangle -- 数塔问题DP
- LeetCode 279 Perfect Squares 题解
- DP问题:leetcode(322) Coin Change
- LeetCode 279 Perfect Squares
- LeetCode-Decode Ways-编码方式-简单DP计数问题
- LeetCode(279)Perfect Squares
- LeetCode(279)Perfect Squares
- LeetCode 279: Perfect Squares
- DP问题:leetcode(300) Longest Increasing Subsequence
- Leetcode 279 Perfect Squares
- leetcode 327. Count of Range Sum 字段和问题 + 动态规划DP解决 + 字段数 + 暴力求解真好
- leetcode279-Perfect Squares
- LeetCode(279)Perfect Squares
- leetcode 115. Distinct Subsequences 简单DP变形+一个必须要学会的DP问题
- LeetCode Triangle 120 DP问题
- LeetCode - 279 - Perfect Squares
- Leetcode 279 Perfect Squares