LeetCode.77. 组合

难度:中等

这道题属于回溯的经典题目:

回溯模板:

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

Java: 

class Solution {List<List<Integer>> list  = new ArrayList<List<Integer>>();// 路径,保存每次结果ArrayList<Integer> path = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return list;}public void backtracking(int n, int k, int startIndex) {if (path.size() == k) {// 想知道为什么这里要这样才能成功添加进入listlist.add(new ArrayList<>(path));// list.add(path);return;}// 已剪枝for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) {path.add(i);    backtracking(n, k, i + 1);path.remove(path.size() - 1);}}
}

Python: 

class Solution: def combine(self, n: int, k: int) -> List[List[int]]:res = []path = []def backtracking(n, k, startIndex):if len(path) == k:res.append(path[:])return# range 左闭右开for i in range(startIndex, n - (k - len(path)) + 2):path.append(i)backtracking(n, k, i + 1)path.pop()backtracking(n, k, 1)return res

记得写构造函数:

class Solution: def __init__(self):self.res = []self.path = []def combine(self, n: int, k: int) -> List[List[int]]:self.backtracking(n, k, 1)return self.resdef backtracking(self, n, k, startIndex):if len(self.path) == k:self.res.append(self.path[:])return# range 左闭右开for i in range(startIndex, n - (k - len(self.path)) + 2):self.path.append(i)self.backtracking(n, k, i + 1)self.path.pop()

复杂度分析:

  • 时间复杂度:O(n)??
  • 空间复杂度:O(n)

LeetCode.77. 组合相关推荐

  1. leetcode:77.组合

    77. 组合 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/combinations 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 ...

  2. LeetCode 77. 组合 | Python

    77. 组合 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/combinations 题目 给定两个整数 n 和 k,返回 1 - n 中所有可能 ...

  3. Java实现 LeetCode 77 组合

    77. 组合 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], ...

  4. LeetCode 77. 组合(回溯)

    1. 题目 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例:输入: n = 4, k = 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[ ...

  5. LeetCode 77 组合 -- 回溯法

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combinations 题意: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 ...

  6. Leetcode 77.组合

    组合 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1 ...

  7. LeetCode 77.组合求和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重复被选 ...

  8. leetcode 77. 组合 思考分析

    目录 1.题目 2.回溯法思路 3.参考其他思路,更深入了解这个问题 4.剪枝优化 可能需要回顾到的知识文章: 1.常用算法总结(穷举法.贪心算法.递归与分治算法.回溯算法.数值概率算法) 2.回溯法 ...

  9. LeetCode 77 组合

    题目描述 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 题解 深度优先搜索 代码 class Solution {public:void dfs(vector< ...

最新文章

  1. 从源码分析DEARGUI之异步调用函数对比
  2. 模板 - 图论 - 树链剖分
  3. linux Hadoop HDFS NameNode进程重启脚本(linux进程通用)
  4. LI标签在Ul中居中显示
  5. ubuntu apt报错无法获得锁/var/lib/dpkg/lock 和无法锁定管理目录
  6. 学游戏3d建模好找工作吗?待遇如何?
  7. 亚马逊机器学习工程师面试怎么过?
  8. Win Form中限制TextBox只能输入数字
  9. random_state的值如何选_算法萌新如何学好动态规划(3)
  10. Xcode 12 to build a single binary with both 32-bit and 64-bit support
  11. python游戏编程入门百度云-《Python游戏编程快速上手》PDF下载|百度云盘
  12. dos命令大全DOS命令图解教程
  13. 优启通制作系统u盘_如何用优启通制作U盘启动盘
  14. 《般若波罗蜜多心经》全文及解释
  15. 边云协同的优点_关于边缘计算和边云协同,看这一篇就够了
  16. 方法简单手把手教你,空闲时间在家剪辑视频,一天收入300多
  17. 本地时间和GMT(UTC)时间的转换
  18. python利用opencv进行车牌号识别定位
  19. 北京邮电大学计算机网络课件,北京邮电大学计算机网络课件第一章:物理层.ppt...
  20. Tampermonkey[油猴插件]开发者的神级工具!

热门文章

  1. uCOS2源码分析3-RTOS核心代码视频课程-第4季第4部分-朱有鹏-专题视频课程
  2. elasticsearch5x学习2.0
  3. (uni-app)微信小程序之腾讯地图(定位当前位置,地图标点及导航)
  4. K-means算法小议
  5. 冬至由来介绍PPT模板
  6. jass制图的一些基础概念
  7. 临时工兼职人员招聘管理小程序开发制作功能介绍
  8. x86-idt初始化
  9. js中的contains方法和indexOf方法
  10. 『python爬虫』16. 多线程与多进程(保姆级图文)