@
cnoder 就是这样
```
public class NSum {
static int res = 13;
static int idx = 0;
public static void main(String[] args) {
int[] arr = {2, 3, 5, 7, 9};
Stack<Integer> resStack = new Stack();
traceback(arr, 0, 0,resStack);
}
public static void traceback(int[] arr, int s,int sum,Stack<Integer> resStack){
for (int i = s; i < arr.length; i++) {
int cs = sum + arr[i];
if(cs > res){
break;
}
resStack.push(arr[i]);
if(cs == res){
System.out.println(idx++ + " - " + resStack + " - " + i + " - " + cs);
resStack.pop();
break;
}
traceback(arr,i,cs,resStack);
resStack.pop();
}
}
}
```
```
0 - [2, 2, 2, 2, 2, 3] - 1 - 13
1 - [2, 2, 2, 2, 5] - 2 - 13
2 - [2, 2, 2, 7] - 3 - 13
3 - [2, 2, 3, 3, 3] - 1 - 13
4 - [2, 2, 9] - 4 - 13
5 - [2, 3, 3, 5] - 2 - 13
6 - [3, 3, 7] - 3 - 13
7 - [3, 5, 5] - 2 - 13