示例1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
class Solution {
public int[][] findContinuousSequence(int target) {
//https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/solution/shi-yao-shi-hua-dong-chuang-kou-yi-ji-ru-he-yong-h/
int left=1,right=1,sum=0;
List<int[]> l = new ArrayList<>();
while(left<=target/2){ //因为left<right,所以当left=target/2时,right>target/2,所以sum=[left:right]>target
if(sum>target){
sum-=left;
left++;
}else if(sum<target){
sum+=right;
right++;
}else{
int[] temp = new int[right-left];
for(int i=left;i<right;i++){
temp[i-left] = i;
}
l.add(temp);
sum-=left;
left++;
}
}
return l.toArray(new int[l.size()][]);
// 暴力解法
// ArrayList<ArrayList<Integer>> alist = new ArrayList<>();
// for(int i=1;i<=target;i++){
// ArrayList<Integer> l = new ArrayList<>();
// int temp = target-i;
// l.add(i);
// for(int j=i+1;j<=target;j++){
// if(j>temp){
// break;
// }else if(j<temp){
// l.add(j);
// temp -= j;
// }else{
// l.add(j);
// alist.add(l);
// break;
// }
// }
// }
// int[][] ans = new int[alist.size()][];
// for(int i=0;i<alist.size();i++){
// int[] temp = new int[alist.get(i).size()];
// for(int j=0;j<alist.get(i).size();j++){
// temp[j] = alist.get(i).get(j);
// }
// ans[i] = temp;
// }
// return ans;
}
}