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

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

方案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;
    
}

}

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看