输入一个正整数 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
1 //双指针:暴力滑动窗口。 快慢指针 2 class Solution { 3 public int[][] findContinuousSequence(int target) { 4 int left=1; 5 int right=1; 6 List<int[]> list=new ArrayList<>(); 7 int row=0; 8 while(right<target){ 9 //相等求得一个解集 10 if((left+right)*(right-left+1)/2==target){ 11 int[] arr=new int[right-left+1]; 12 for(int i=0,j=left;i<arr.length;i++,j++){ 13 arr[i]=j; 14 } 15 list.add(arr); 16 left++; 17 //小于,说明当前和小了,右指针右移一位 18 }else if((left+right)*(right-left+1)/2<target){ 19 right++; 20 }else{ 21 //大于,说明当前和大了,左指针右移一位 22 left++; 23 } 24 } 25 26 int[][] res=new int[list.size()][]; 27 for (int i = 0; i < res.length; i++) { 28 res[i]=list.get(i); 29 } 30 return res; 31 32 } 33 }
原文:https://www.cnblogs.com/SEU-ZCY/p/14643780.html