剑指offer 和为S的连续正数序列
和为S的连续正数序列
http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe
使用前缀和公式
S[i] = a[1] + a[2] + ... a[i]
a[l] + ... + a[r] = S[r] - S[l - 1]
import java.util.*; public class Solution { public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) { int []a = new int[sum+1]; // a[i] 表示 1 ~i 的和 int temp=0; for(int i =1;i<sum;i++){ temp+=i; a[i] = temp; } int [][]b = new int[sum+1][sum+1]; // 表示 i ~ j的和 for(int i=1;i<sum;i++){ for(int j=i+1;j<sum;j++){ b[i][j] = a[j] - a[i-1]; } } ArrayList<ArrayList<Integer> > list = new ArrayList<ArrayList<Integer> >(); for(int i=1;i<sum;i++){ for(int j=i+1;j<sum;j++){ if(b[i][j] == sum){ ArrayList<Integer> li = new ArrayList<Integer>(); for(int z = i;z<=j;z++){ li.add(z); } list.add(li); } } } return list; } }