暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一题——组合

有理想的菜鸡 2020-06-23
157

菜鸡每日一题系列打卡77

每天一道算法题目 

小伙伴们一起留言打卡

坚持就是胜利,我们一起努力!


题目描述(引自LeetCode)

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


    示例:
    输入: n = 4, k = 2
    输出:
    [
    [2,4],
    [3,4],
    [2,3],
    [1,2],
    [1,3],
    [1,4],
    ]


    题目分析

    这道题目我们可以采用回溯法来实现,之前的文章中已经说过,所谓的回溯,就是不断试探,如果可行则继续向下试探,否则返回上一步继续试探。


    组合问题是回溯法的经典应用。话不多说,上代码!


    代码实现

      class Solution {


      private List<List<Integer>> result = new LinkedList();


      public List<List<Integer>> combine(int n, int k) {
      backtrack(n, k, 1, new LinkedList<Integer>());
      return result;
      }


      private void backtrack(int n, int k, int start, LinkedList<Integer> tmp) {
      if (tmp.size() == k) result.add(new LinkedList(tmp));
      for (int i = start; i <= n; i++) {
      tmp.add(i);
      backtrack(n, k, i + 1, tmp);
      tmp.removeLast();
      }
      }

      }


      代码分析

      对代码进行分析,时间复杂度为

      空间复杂度为


      执行结果



      学习 | 工作 | 分享

      👆长按关注“有理想的菜鸡

      只有你想不到,没有你学不到
      文章转载自有理想的菜鸡,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论