和为s的连续正数序列

非 Y 不嫁゛ 提交于 2020-03-07 05:02:10

题目描述:

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
输入示例:
输入:target = 9
输出:[[2,3,4],[4,5]]

解题思路:

1.暴力解题法:分别以i=1 to i=target/2,为开头,依次便利是否有满足条件的数组(为什么是target/2,因为target/2以后的数相加一定大于target,因此不用再往后),同时,对于每个i开头的,要记录其往后寻找到的长度(即每次放入一个,target就减去他,同时记录次数,直到target=0)

代码:

class Solution {
    public int[][] findContinuousSequence(int target) {
        List<int[]> arr = new ArrayList<>();
        if(target<=1 || target>=Math.pow(10,5)){
            return null;
        }else{
            for(int i=1;i<=target/2;i++){
                int count=i;//用count保存i,如果直接用i操作,会改变i的值
                int temp=target;
                while(temp>0){
                    temp=temp-count;//count就是每次插入的数
                    count++;
                }
                if(temp==0&&count-i>=2){
                    int[] item=new int[count-i];//起始是i,结束是count-1,故长度是count-1+i+1=count-i
                    int x=i;
                    for(int j=0;j<item.length;j++){
                        item[j]=x;
                        x++;
                    }
                    arr.add(item);
                }
            }
        }
        return arr.toArray(new int[0][]);
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!