输入一个正整数 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() ][] );
}
}
网友评论