77. Combinations

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

public List> combine(int n, int k) {
    ArrayList> res = new ArrayList<>();
    if (n <= 0 || k > n) {
        return res;
    }
    helper(1, n, k, new ArrayList(), res);
    return res;
}

private void helper(int currentVal, int limit, int count, ArrayList path, ArrayList> res) {
    if (count == 0) {
        res.add(new ArrayList(path));
        return;
    }
    if (currentVal > limit) {
        return;
    }
    
    for (int i = currentVal; i <= limit; i++) {
        path.add(i);
        helper(i + 1, limit, count - 1, path, res);
        path.remove(path.size() - 1);
    }
}

时间复杂度为题解个数 n!/ (n - k)! / k!

你可能感兴趣的:(77. Combinations)