Thursday, January 23, 2014

Combinations LeetCode

这个题就是用下递归,逐个把最大的数放入combine(i-1, k-1)中,成为combine (i, k).

举个例子容易理解些。 combine(3, 1) 成为 combine (4, 2)

[1, 4] [2, 4] [3, 4]
[1, 3] [2, 3]
[1, 2]
我觉得这个题用recursive写非常的清晰和整齐。我自己都被程序感动了。

代码如下
public ArrayList<ArrayList<Integer>> combine(int n, int k) {
        if (n < k) return null;
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        if (k == 1){
            for (int i = 1; i <= n; i++){
                ArrayList<Integer> current = new ArrayList<Integer>();
                current.add(i);
                result.add(current);
            }
        } else {
            for (int i = n; i >= k; i--){
                for (ArrayList<Integer> current : combine(i-1, k-1)){
                    current.add(i);
                    result.add(current);
                }
            }
        }
        return result;
    }

1 comment:

  1. 这个写法太棒了 我也感动地快要流泪了

    ReplyDelete