和为S的连续正数序列
2017-11-21 08:41
120 查看
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
int small = 1;
int big = 2;
int curSum = small+big;
while(small < big && small < (sum+1)/2){
if(curSum == sum){
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=small;i<=big;i++){
list.add(i);
}
result.add(list);
//更新
curSum -= small;
//区间右移
small ++;
big ++;
curSum += big;
}else if(curSum < sum){ //tmp_sum小,右侧扩展
//区间右侧 右移,包括更大的数字
big ++;
curSum += big; //更新
}else{ //tmp_sum大,左侧紧缩
curSum -= small;
small ++; //左侧紧缩
}
}
return result;
}
}
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
int small = 1;
int big = 2;
int curSum = small+big;
while(small < big && small < (sum+1)/2){
if(curSum == sum){
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=small;i<=big;i++){
list.add(i);
}
result.add(list);
//更新
curSum -= small;
//区间右移
small ++;
big ++;
curSum += big;
}else if(curSum < sum){ //tmp_sum小,右侧扩展
//区间右侧 右移,包括更大的数字
big ++;
curSum += big; //更新
}else{ //tmp_sum大,左侧紧缩
curSum -= small;
small ++; //左侧紧缩
}
}
return result;
}
}
相关文章推荐
- 和为S的连续正数序列
- 【剑指offer】和为定值的连续正数序列
- 41-所有和为s的连续正数序列/递增数列中和为s的两个数字
- 面试题:和为s的连续正数序列
- 41 和为 s 的连续正数序列
- 【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】
- 剑指offer——和为s的连续正数序列
- 41.和为s的两个数字VS和为s的连续正数序列
- 数据结构——算法之(020)( 和为n连续正数序列)
- 【数组12】和为S的连续正数序列
- 剑指offer--和为S的连续正数序列
- 剑指Offer(57)和为S的连续正数序列
- 和为s的两个数字VS和为s的连续正数序列
- 【剑指offer】和为定值的连续正数序列
- 剑指Offer面试题41(Java版):和为s的两个数字VS和为s的连续正数序列
- 剑指offer----和为S的连续正数序列----java实现
- 【题目35】和为n连续正数序列
- 剑指offer41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer--和为S的连续正数序列
- 剑指offer:和为S的连续正数序列