LeetCode 57 - II. 和为s的连续正数序列

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]

示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

限制:

  • 1 <= target <= 10^5

思路:双指针

class Solution {
    public int[][] findContinuousSequence(int target) {
        int L = 1, R = 1, sum = 0, k = 0;
        List< int[] > a = new ArrayList<>();
        while( true ){
            sum = ( L + R ) * ( R - L + 1 ) / 2;
            if( sum == target ){
                int[] item = new int[ R - L + 1 ];
                for( int i = L; i <= R; i++ )
                    item[ i - L ] = i;
                a.add( item );
                L++;
                R++;
            }
            else if( sum > target ){
                L++;
            }
            else if( sum < target ){
                R++;
                if( R > ( target + 1 ) / 2 )
                    break;
            }
        }
        return a.toArray( new int[ a.size() ][] );
    }
}

你可能感兴趣的:(LeetCode 57 - II. 和为s的连续正数序列)