剑指offer 和为s的连续正数序列
2017-04-23 14:46
288 查看
题目:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。
思想是:先把left初始化为1,right初始化为2,如果从left到right的序列和大于s,我们可以去掉较小的值,也就是增大left的值,如果小于s,可以增大right的值,让这个序列包含更多的数字,因为这个序列至少要有两个数字,我们一直增加到left到(1+s)/2;
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
int left=1;int right=2;
if(sum<3)return list;
int curSum=left+right;
while(left<(sum+1)/2){
if(curSum==sum)
{
ArrayList<Integer> ls=new ArrayList<Integer>();
for(int i=left;i<=right;i++)
ls.add(i);
list.add(ls);
}
while(curSum>sum&&left<(sum+1)/2){
curSum-=left;
left++;
if(curSum==sum){
ArrayList<Integer> ls=new ArrayList<Integer>();
for(int i=left;i<=right;i++)
ls.add(i);
list.add(ls);
}
}
right++;
curSum+=right;
}
return list;
}
}
思想是:先把left初始化为1,right初始化为2,如果从left到right的序列和大于s,我们可以去掉较小的值,也就是增大left的值,如果小于s,可以增大right的值,让这个序列包含更多的数字,因为这个序列至少要有两个数字,我们一直增加到left到(1+s)/2;
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
int left=1;int right=2;
if(sum<3)return list;
int curSum=left+right;
while(left<(sum+1)/2){
if(curSum==sum)
{
ArrayList<Integer> ls=new ArrayList<Integer>();
for(int i=left;i<=right;i++)
ls.add(i);
list.add(ls);
}
while(curSum>sum&&left<(sum+1)/2){
curSum-=left;
left++;
if(curSum==sum){
ArrayList<Integer> ls=new ArrayList<Integer>();
for(int i=left;i<=right;i++)
ls.add(i);
list.add(ls);
}
}
right++;
curSum+=right;
}
return list;
}
}
相关文章推荐
- 剑指offer-41.和为S的连续正数序列
- 剑指offer 41题【知识迁移能力】和为S的连续正数序列
- 剑指offer:和为S的连续正数序列
- 剑指offer 和为S的连续正数序列
- 剑指Offer—41—和为S的连续正数序列
- 剑指offer之和为S的连续正数序列
- 剑指offer--和为S的连续正数序列
- 【剑指offer-解题系列(42)】和为S的连续正数序列
- 剑指Offer-面试题41-和为s 的两个数字vs 和为s 的连续正数序列
- 【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】
- 剑指offer-和为S的连续正数序列
- 剑指offer:和为 s 的连续正数序列
- 剑指Offer_面试题41_和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer题解 和为S的连续正数序列
- 【剑指Offer】面试题41:和为s的连续正数序列
- (C++)剑指offer-41:和为S的连续正数序列(知识迁移能力)
- 剑指offer-面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指Offer(57)和为S的连续正数序列
- 剑指offer 之 和为S的连续正数序列
- 剑指offer面试题[41]-和为s的两个数VS和为s的连续正数序列