zoukankan      html  css  js  c++  java
  • Leetcode 77.组合

    组合

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

    示例:

    输入: n = 4, k = 2

    输出:

    [

    [2,4],

    [3,4],

    [2,3],

    [1,2],

    [1,3],

    [1,4],

    ]

    采用回溯算法。这是一道 NP 难问题,时间复杂度没办法提高,用一个循环递归处理子问题,问题的终止条件是每个组合中的元素个数达到 k 个

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class Solution{
     5     public List<List<Integer>> combine(int n, int k){
     6         List<List<Integer>> res=new ArrayList<List<Integer>>();
     7         List<Integer> temp=new ArrayList<Integer>();
     8         dfs(res,temp,n,k,1);
     9         return res;
    10     }
    11 
    12     private void dfs(List<List<Integer>> res,List<Integer> temp,int n,int k,int m){
    13         if(k==0){
    14             res.add(new ArrayList<Integer>(temp));
    15             return;
    16         }
    17         for(int i=m;i<=n;i++){
    18             temp.add(i);
    19             dfs(res,temp,n,k-1,i+1);
    20             temp.remove(temp.size()-1);
    21         }
    22     }
    23 }
  • 相关阅读:
    栈和队列
    链表
    map
    二叉平衡树旋转
    二叉排序树详情
    红黑树详情
    查并集
    动态规划
    位操作
    字典树
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10163055.html
Copyright © 2011-2022 走看看