6 public class Enumerate {
7
8 private int[] data;
9
10 private List<Integer> list = new ArrayList<Integer>();
11
12 private List<Integer> index_list = new ArrayList<Integer>();// 数组
data 的下标, list.get(i)=data[index_list.get(i)];
13
14 private int s;// 余下的和,初始值为 sum(data)/3
15
16 private int n;// list.get(0)=data[n]
17
18 private int index;// 数组 data 的下标
19
20 public void enumerate() {
21 if (n < data.length) {
22 if (index < data.length) {
23 if (data[index] < s) {
24 index_list.add(index);
25 list.add(data[index]);
26 s -= data[index];
27 index++;
28 enumerate();
29 } else if (data[index] == s) {
30 index_list.add(index);
31 list.add(data[index]);
32 s = 0;
33 } else {
34 index++;
35 enumerate();
36 }
37 } else {
38 if (list.size() > 0) {
39 int l = (Integer) list.remove(list.size() - 1);
40 s += l;
41 index = (Integer) index_list.remove(index_list.size() - 1) +
1;
42 enumerate();
43 } else {
44 n++;
45 index = n;
46 enumerate();
47 }