原题链接:77. Combinations

【思路-Java、Python】递归实现

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

public class Solution {public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res = new ArrayList<List<Integer>>();List<Integer> temp = new ArrayList<Integer>();dfs(res, temp, n, k, 1);return res;}private void dfs(List<List<Integer>> res, List<Integer> temp, int n, int k, int m) {if(k == 0) {res.add(new ArrayList<Integer>(temp));return;}for(int i=m; i<=n; i++) {temp.add(i);dfs(res, temp, n, k-1, i+1);temp.remove(temp.size()-1);}}
}

26 / 26  test cases passed. Runtime: 3 ms  Your runtime beats 56.70% of javasubmissions.

class Solution(object):def combine(self, n, k):""":type n: int:type k: int:rtype: List[List[int]]"""res = []self.rec(res, 0, n, k, [])return resdef rec(self, res, i, n, k, temp) :if k == 0 :res.append(temp)returnfor j in range(i+1, n+1) :self.rec(res, j, n, k-1, temp+[j])

26 / 26  test cases passed. Runtime: 88 ms  Your runtime beats 32.21% of pythonsubmissions.

【思路2-Python】非递归实现

class Solution(object):def combine(self, NN, K):""":type n: int:type k: int:rtype: List[List[int]]"""result = [[[]]]for n in range(1,NN+1):newRes=[[[]]]for k in range(1,n):newRes.append(result[k] + [i + [n] for i in result[k-1]])newRes.append([result[n-1][0] + [n]])result = newResreturn result[K]

26 / 26  test cases passed. Runtime: 88 ms  Your runtime beats 32.21% of pythonsubmissions.

更优解法可参考:优化解法

leetcode 77. Combinations-排列|递归|非递归|Java|Python相关推荐

  1. java 建树源码_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    import java.util.ArrayDeque; import java.util.Queue; import java.util.Stack; //二叉树的建树,前中后 递归非递归遍历 层序 ...

  2. Java 二叉树后序遍历(递归/非递归)

    Java 二叉树后序遍历(递归/非递归) 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次. 设L.D.R分 ...

  3. java建树_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    本文实例讲述了Java实现的二叉树常用操作.分享给大家供大家参考,具体如下: import java.util.ArrayDeque; import java.util.Queue; import j ...

  4. Java 二叉树中序遍历(递归/非递归)

    Java 二叉树中序遍历(递归/非递归) 中序遍历 代码实现 递归方式 非递归方式 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访 ...

  5. 二叉树——中序遍历(递归/非递归)

    中序遍历,即遍历顺序为:左节点.根节点.右节点. 二叉树节点: public class Node {public Node left;public Node right;public int val ...

  6. 树的深度 递归非递归实现

    树的深度 递归非递归实现 package com.dugstudio.SwordToOffer;import java.util.LinkedList;/*** 树的深度递归和非递归算法*/ clas ...

  7. 二叉树的四种遍历方式——前序、中序、后序、层序遍历(递归+非递归实现)

    如果N代表根节点,L代表根节点的左子树,R代表根节点的右子树,则根据遍历根节点的先后次序有以下遍历方式: 1. NLR:前序遍历(Preorder Traversal 亦称先序遍历)--访问根结点-- ...

  8. 快排递归非递归python_Python递归神经网络终极指南

    快排递归非递归python Recurrent neural networks are deep learning models that are typically used to solve ti ...

  9. c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...

  10. 【DFS】LeetCode 77. Combinations

    LeetCode 77. Combinations Solution1:我的答案 DFS,时间复杂度O(n!)O(n!)O(n!),空间复杂度O(n)O(n)O(n) class Solution { ...

最新文章

  1. cuda 本地内存使用_CUDA 基础知识博客整理
  2. 015_html注释
  3. 农行校招考试计算机类,农行校招:还有4个月,流程是这样!
  4. linux 命令调试分析core文件,linux环境下dump vmcore文件分析
  5. 使用PropertyPlaceholderConfigurer读取属性文件
  6. 电源模块的9个主要性能指标及其作用
  7. mysql学生选课系统的关系模型_使用PowerDesigner搭建学生选课管理系统(学生老师管理员一体系结构)由基础设计至数据库生成(SQL语句源代码的生成)全过程实例操作...
  8. oracle移动硬盘盒,oracle-linux下挂载移动硬盘 NTFS类型
  9. [WARNING] Unable to autodetect 'javac' path, using 'javac' from the environment.
  10. Shell script 笔记
  11. UWB信号对服务器有没有干扰,uwb定位技术原理及应用分析
  12. 松下服务器显示18号报警,松下伺服故障报警代码分析及处理
  13. 浏览器ocx控件安装 IE浏览器可用
  14. Codeforces1153D-Serval and Rooted Tree(树形dp)
  15. HDMI 连接笔记本与显示器
  16. 【DockerCE】RHEL 7.9完整安装DockerCE 20.10.5的包集合
  17. ai星际探索 爪子_通过特征空间探索实现可解释的人工智能
  18. 6大社群运营技巧,让你轻松度过新媒体寒冬
  19. String Date Calendar之间的转换
  20. Jpa 中怎么玩一对多?

热门文章

  1. win10自带的ssh使用方法
  2. 【进阶4-3期】面试题之如何实现一个深拷贝
  3. 一文入门Go静态单赋值(SSA)
  4. [转载]2017 中国电信(美洲)公司CTExcel US电话卡使用攻略_拔剑-浆糊的传说_新浪博客
  5. 无线智能灌溉系统功能
  6. Java 【求一个整数是否为2的倍数】
  7. 深度学习框架量化感知训练的思考及OneFlow的解决方案
  8. 快速搞懂10类常见运营岗
  9. Python 一个抓取糗百的段子的小程序
  10. 基于Lucene的联系人拼音检索(第一部分)