回溯!!!
题目描述
Given two integers n and k, return all possible combinations ofk numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
回溯是我觉得最难的题目,因为我无法理清楚里面经历的步骤。今天一并边看题变总结。
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> combine(int n, int k) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(k == 0)
return result;
ArrayList<Integer> track = new ArrayList<Integer>();
back(result, track, 1, n, k);
return result;
}
public void back(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> track, int m , int n, int k) {
if(track.size() == k) {
ArrayList<Integer> t = new ArrayList<Integer>(track);
result.add(t);
return;
}
for(int i=m; i<=n; i++) {
track.add(i);
back(result, track, i+1, n, k);
track.remove(track.size()-1);
}
}
}