Middle-题目35:77. Combinations

原创 2016年05月31日 15:57:39

题目原文:
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],
]

题目大意:
给出两个正整数n和k,求从1~n中取k个数的所有组合方式。
题目分析:
还是一个回溯法,用backtrack(List<List<Integer>> list, List<Integer> sublist, int n, int k, int start,int totaln)函数维护搜索过程,list代表最终返回结果,sublist记录当前搜索路径,n记录当前还有几个数要搜索,k记录当前还要取几个数,start记录当前要搜索的第一个数,totaln一直维持问题最开始的n。
这样递归关系是,每找到一个数字i, n=totaln-i(因为继续搜索的时候只需从i+1开始找),k=k-1,start=i+1.
一直找到k=0的时候搜索结束。
源码:(language:java)

public class Solution {
    public static List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        backtrack(list,new ArrayList<Integer>(),n,k,1,n);
        return list;
    }
    private static void backtrack(List<List<Integer>> list, List<Integer> sublist, int n, int k, int start,int totaln) {
        if(k == 0) 
            list.add(new ArrayList<Integer>(sublist));
        else {
            for(int i = start;i < start + n;i++) {
                sublist.add(i);
                backtrack(list,sublist,totaln-i,k-1,i+1,totaln);
                sublist.remove(sublist.size()-1);
            }
        }
    }
}

成绩:
3ms,beats 50.28%,众数3ms,37.00%
cmershen的碎碎念:
本题似乎还可以简化一个变量。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

相关文章推荐

[Leetcode] 77. Combinations 解题报告

题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. ...

LeetCode 77. Combinations 组合问题C(n,k),树形状态回溯,优化减枝

77. Combinations Given two integers n and k, return all possible combinations of k numbers out of ...

[LeetCode]77.Combinations

Given two integers n and k, return all possible combinations of k numbers out of 1 … n.

LeetCode #77 - Combinations - Medium

ProblemGiven two integers n and k, return all possible combinations of k numbers out of 1 ... n. Exa...

[LeetCode]problem 77. Combinations

TAG组合; 回溯 ; 递归与迭代题目链接方法与求和为n的所有组合完全类似——如果使用递归版本的话。当时一连做了3个相似的题,记住了递归的方法,非常直观,可是也非常不错。这次看着题还是非常有印象的,迅...

LeetCode(77) Combinations

题目Given two integers n and k, return all possible combinations of k numbers out of 1 … n.For example...

[leetcode] 77. Combinations

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For examp...

leetcode解题之 77. Combinations&78. Subsets&90. Subsets II java 版(求所有子集)

leetcode解题之 Subsets java 版(求所有子集) ,90. Subsets II ,78. Subsets,77. Combinations

60. Permutation Sequence\78. Subsets\77. Combinations

Permutation Sequence 题目描述 代码实现 Subsets 题目描述 代码实现 Combinations 题目描述 代码实现60. Permutation Sequence题目描述T...

LeetCode 77 Combinations

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)