第77题:组合

一. 问题描述

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

示例:

输入: n = 4, k = 2

输出:

[

  [2,4],

  [3,4],

  [2,3],

  [1,2],

  [1,3],

  [1,4],

]

二. 解题思路

解题思路:本题利用递归回溯进行求解,递归函数要求(全局变量temlist,局部当前已有列表list,限制数量k,剩余数列表m)

    递归结束条件:列表list的数量等于限制数量k。

三. 执行结果

执行用时 :160 ms, 在所有 java 提交中击败了5.05%的用户

内存消耗 :41 MB, 在所有 java 提交中击败了87.69%的用户

四. Java代码

class Solution {
    public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> temlist=new ArrayList<List<Integer>>();
        List<Integer> list=new ArrayList<Integer>();
        List<Integer> m=new ArrayList<Integer>();
        for(int j=1;j<=n;j++)
            m.add(j);
        com(temlist,list,k,m);
        return temlist;
    }
    
      
    public void com(List<List<Integer>> temlist,List<Integer> list, int k, List<Integer>  m)
    {
        if(list.size()==k)
        {
            temlist.add(list);
            return;
        }
        else
        {
            for(int i=0;i<m.size();i++)
            {
                if(list.size()==0||(list.get(list.size()-1)<m.get(i)))
                {
                List<Integer> alist=new ArrayList<Integer>(list);
                List<Integer> am=new ArrayList<Integer>(m);
                alist.add(am.get(i));
                am.remove(i);
                com(temlist, alist, k, am);
                }
            }
        }      
    }
}
原文地址:https://www.cnblogs.com/xiaobaidashu/p/11715367.html