leetcode 77. Combinations-排列|递归|非递归|Java|Python
原题链接: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相关推荐
- java 建树源码_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...
import java.util.ArrayDeque; import java.util.Queue; import java.util.Stack; //二叉树的建树,前中后 递归非递归遍历 层序 ...
- Java 二叉树后序遍历(递归/非递归)
Java 二叉树后序遍历(递归/非递归) 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次. 设L.D.R分 ...
- java建树_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...
本文实例讲述了Java实现的二叉树常用操作.分享给大家供大家参考,具体如下: import java.util.ArrayDeque; import java.util.Queue; import j ...
- Java 二叉树中序遍历(递归/非递归)
Java 二叉树中序遍历(递归/非递归) 中序遍历 代码实现 递归方式 非递归方式 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访 ...
- 二叉树——中序遍历(递归/非递归)
中序遍历,即遍历顺序为:左节点.根节点.右节点. 二叉树节点: public class Node {public Node left;public Node right;public int val ...
- 树的深度 递归非递归实现
树的深度 递归非递归实现 package com.dugstudio.SwordToOffer;import java.util.LinkedList;/*** 树的深度递归和非递归算法*/ clas ...
- 二叉树的四种遍历方式——前序、中序、后序、层序遍历(递归+非递归实现)
如果N代表根节点,L代表根节点的左子树,R代表根节点的右子树,则根据遍历根节点的先后次序有以下遍历方式: 1. NLR:前序遍历(Preorder Traversal 亦称先序遍历)--访问根结点-- ...
- 快排递归非递归python_Python递归神经网络终极指南
快排递归非递归python Recurrent neural networks are deep learning models that are typically used to solve ti ...
- c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析
C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...
- 【DFS】LeetCode 77. Combinations
LeetCode 77. Combinations Solution1:我的答案 DFS,时间复杂度O(n!)O(n!)O(n!),空间复杂度O(n)O(n)O(n) class Solution { ...
最新文章
- cuda 本地内存使用_CUDA 基础知识博客整理
- 015_html注释
- 农行校招考试计算机类,农行校招:还有4个月,流程是这样!
- linux 命令调试分析core文件,linux环境下dump vmcore文件分析
- 使用PropertyPlaceholderConfigurer读取属性文件
- 电源模块的9个主要性能指标及其作用
- mysql学生选课系统的关系模型_使用PowerDesigner搭建学生选课管理系统(学生老师管理员一体系结构)由基础设计至数据库生成(SQL语句源代码的生成)全过程实例操作...
- oracle移动硬盘盒,oracle-linux下挂载移动硬盘 NTFS类型
- [WARNING] Unable to autodetect 'javac' path, using 'javac' from the environment.
- Shell script 笔记
- UWB信号对服务器有没有干扰,uwb定位技术原理及应用分析
- 松下服务器显示18号报警,松下伺服故障报警代码分析及处理
- 浏览器ocx控件安装 IE浏览器可用
- Codeforces1153D-Serval and Rooted Tree(树形dp)
- HDMI 连接笔记本与显示器
- 【DockerCE】RHEL 7.9完整安装DockerCE 20.10.5的包集合
- ai星际探索 爪子_通过特征空间探索实现可解释的人工智能
- 6大社群运营技巧,让你轻松度过新媒体寒冬
- String Date Calendar之间的转换
- Jpa 中怎么玩一对多?