和为S的连续序列
序列长度范围是2~length-2,遍历长度,并且求此长度时序列的均值,然年根据均值和序列数量展开序列
- 注意:需要判断左边是否越界,e.g.[-1,0,1,2,3,4]
import java.util.ArrayList;
public class Solution {
//自己发明的方法
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if (sum < 2)
return list;
//mid均值
double mid = 0;
//可能的数量是2~sum-1个
for (int i = sum-1; i >= 2; i--) {
//当连续数列个数是i时,mid均值
mid = (double)sum / i;
//为了保证不越界,保证不出现负数,左边必须大于0
//[-1,0,1,2,3,4]
if (mid *2 < i)
continue;
//均值是0.5倍数,且个数是偶数个,或者,均值整数且奇数个,找到了
//我他妈怎么想出的这方法!牛逼!
if ((mid % 1 == 0.5 && i % 2 == 0) || (mid % 1 == 0 && i % 2 == 1)){
System.out.println(mid%1);
list.add(help(mid, i));
}
}
return list;
}
//添加均值为mid的i个数
private ArrayList<Integer> help(double mid, int i) {
ArrayList<Integer> l = new ArrayList<Integer>();
int c = (int) Math.ceil(mid - i / 2);
for (int j = c; j < i+c; j++) {
System.out.println(j);
l.add(j);
}
return l;
}
}