Combinations

全排列 按理说很简单,可是用递归写,边界条件就还是难想清楚,sigh
主要是n<k和k==1的条件要想清楚
public class Solution {
    public ArrayList<ArrayList<Integer>> combine(int n, int k) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>();
        if (n < 1 || k < 1 || n<k)
            return results;
        if (k == 1){
            for (int i = 1; i != n+1; ++i){
                ArrayList<Integer> temp = new ArrayList<Integer>();
                temp.add(i);
                results.add(temp);
            }
            return results;
        }
        ArrayList<ArrayList<Integer>> results1 = combine(n-1, k-1);
        for (int i = 0; i < results1.size(); ++i)
            results1.get(i).add(n);
        ArrayList<ArrayList<Integer>> results2 = combine(n-1, k);
        results.addAll(results1);
        results.addAll(results2);
        return results;
    }
}

你可能感兴趣的:(com)