剑指offer系列46---和为s的连续正数序列

Posted noaman_wgs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列46---和为s的连续正数序列相关的知识,希望对你有一定的参考价值。

【题目】输出所有和为S的连续正数序列。序列为:1,2,3,4,5,6,7,8.。。。。。。。。。。。。。。。
* 序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

 1 package com.exe9.offer;
 2 
 3 /**
 4  * 【题目】输出所有和为S的连续正数序列。序列为:1,2,3,4,5,6,7,8.。。。。。。。。。。。。。。。
 5  *          序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
 6  * @author WGS
 7  *
 8  */
 9 import java.util.ArrayList;
10 public class FindTotalContinuousSequence {
11     
12     public ArrayList<ArrayList<Integer>> getSequenceEqualS(int s){
13         
14         ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
15         if(s<3) return list;
16         
17         int small=1;
18         int big=2;
19         int mid=(1+s)/2;
20         int sum=small+big;
21         
22         while(small<mid){
23             ArrayList<Integer> numList=new ArrayList<Integer>();
24             if(sum==s){
25                 /*for(int i=small;i<=big;i++){
26                     numList.add(i);
27                 }*/        
28                 add(small,big,numList);
29             }        
30             while(sum>s && small<mid){
31                 sum-=small;
32                 small++;    
33                 if(sum==s){
34                     /*for(int i=small;i<=big;i++){
35                         numList.add(i);
36                     }        */        
37                     add(small,big,numList);
38                 }
39             }
40             //此时sum>s  跳出while循环,进入到下面步骤
41             //sum>s
42             if(numList.size()>0)
43                 list.add(numList);
44             big++;
45             sum+=big;
46                                 
47         }
48         
49         return list;
50         
51     }
52 
53     private void add(int small,int big,ArrayList<Integer> numList){
54         for(int i=small;i<=big;i++){
55             numList.add(i);
56         }    
57     }
58     public static void main(String[] args) {
59         FindTotalContinuousSequence f=new FindTotalContinuousSequence();
60         ArrayList<ArrayList<Integer>> list=f.getSequenceEqualS(15);
61         for(ArrayList<Integer> l:list){
62             System.out.println(l);
63         }
64         //System.out.println();
65     }
66 
67 }

 

以上是关于剑指offer系列46---和为s的连续正数序列的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer-和为S的连续正数序列

剑指offer和为S的连续正数序列

剑指offer-和为s的连续正数序列

剑指offer 和为S的连续正数序列

剑指offer57 和为s的连续正数序列

和为S的连续正数序列——牛客网(剑指offer)