LeetCode刷题笔录Combinations

来源:互联网 发布:淘宝首页如何装修全屏 编辑:程序博客网 时间:2024/06/05 10:50

Given two integers n and k, return all possible combinations of k 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],]

这题和Permutations这题差不多。注释里写了想法。

在这里有一个更详尽的说明。

public class Solution {    public ArrayList<ArrayList<Integer>> combine(int n, int k) {        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();        if(n == 0 || k == 0)            return result;        recursive(result, n, k, new ArrayList<Integer>(), 1);        return result;    }        public void recursive(ArrayList<ArrayList<Integer>> result, int n, int k, ArrayList<Integer> oneSolution, int start){        //the current arraylist has the size of k, go to next solution        if(oneSolution.size() == k){            result.add(new ArrayList<Integer>(oneSolution));            return;        }        for(int i = start; i <= n; i++){            oneSolution.add(i);            //the next number should be larger thank the previous number            //i.e., if the first digit is 1, then the second digit can only be 2, 3, 4,...n            //this is reflected by incrementing start in the recursive call            recursive(result, n, k, oneSolution, start + 1);            //remove the last trial digit and try the next            //if [1,2,x](x from 3 to n) is tried, remove the 2, try from [1,3,x]            oneSolution.remove(oneSolution.size() - 1);        }    }}



0 0
原创粉丝点击