输出所有和为S的连续正数序列。

岁酱吖の 提交于 2019-12-17 10:35:56

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

方案1

import java.util.ArrayList;

public class Solution {

public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {

   ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
   
   ArrayList<Integer> temp = new ArrayList<Integer>();
    
    int i=1;
    int total=1;
    temp.add(i);
    int t=0;
    
    while(temp.size()>=1){
        if(total==sum){
            //这个判断也很重要,一个数等于sum不算
            if(temp.size()>1)
             result.add(new ArrayList<Integer>(temp));
            t=temp.remove(0);
            total=total-t;
            i++;
            temp.add(i);
            total=total+i;
        }else if(total<sum)
        {
            i++;
            temp.add(i);
            total=total+i;
        }else{
            t=temp.remove(0);
            total=total-t; 
        }
    }
    
    return result;
    
}

}

方案2

import java.util.ArrayList;

public class Solution {

public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {

   ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
   ArrayList<Integer> temp = null;
   if(sum<3)
       return result;
    
   int left=1;
   int right=2;
   int total=left+right;
   int mid = (sum+1)/2;
   
   while(left<mid&&right<sum){
       while(total>sum){
           total=total-left;
           left= left+1;
       }
       
       if(total==sum){
          temp=new ArrayList<Integer>();
           for(int i=left;i<=right;i++)
               temp.add(i);
          result.add(temp);
       }
       right++;
       total=total+right;
   }
   
    
    return result;
    
}

}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!