码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-06-23 16:03:43      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

【题目】输出所有和为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的连续正数序列

标签:

原文地址:http://www.cnblogs.com/noaman/p/5610985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!