剑指offer--和为S的连续正数序列
2015-04-12 23:40
295 查看
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?Good Luck![b]输出描述:[/b]
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
分类:数组
解法1:双指针,如果比sum小,end指针一直向后移动加入数字,直到等于sum或者超过sum,这时start就要向后移动,直到小于sum
小于sum以后,又开始移动end指针
import java.util.ArrayList; public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>(); if(sum<3) return arr; int all = 0; int cur = 1; ArrayList<Integer> a1 = new ArrayList<Integer>(); while(cur<=sum/2+1){ if((all+cur)<sum){ a1.add(cur); all += cur; cur++; }else if((all+cur)==sum){ a1.add(cur); all += cur; ArrayList<Integer> temp = new ArrayList<Integer>(); temp.addAll(a1); if(temp.size()>=2) arr.add(temp); cur++; }else{ if(a1.size()>0){ all -= a1.remove(0); } } } return arr; } }
相关文章推荐
- 剑指offer-和为S的连续正数序列
- [剑指offer]和为S的连续正数序列
- 剑指offer 和为s的连续正数序列
- 【剑指offer之和为s的两个数字VS和为s的连续正数序列】
- 【剑指offer】面试题41-和为S的两个数VS和为S的连续正数序列
- 【剑指offer】和为定值的连续正数序列
- [剑指offer][面试题41]和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer——和为S的连续正数序列
- 剑指offer——41.和为S的连续正数序列
- 剑指Offer之 - 和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer-和为S的连续正数序列-两根指针
- 剑指offer 41 - 和为s的两个数字VS为s的连续正数序列
- 剑指Offer之和为S的连续正数序列
- 剑指offer:和为S的连续正数序列
- 剑指Offer——输入正整数S,打印出所有和为S的连续正数序列(至少含有两个正数)
- 剑指Offer——(42)和为S的连续正数序列
- 剑指Offer 41题 和为s的两个数字VS 何为S的连续正数序列 Java版
- 码农小汪剑指Offer之39-和为S的连续正数序列
- 剑指offer——面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer——和为s的连续正数序列