当前位置: 首页 > news >正文

代码随想录27期|Python|Day24|回溯法|理论基础|77.组合

图片来自代码随想录

回溯法题目目录

理论基础

定义

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 

回溯是递归的副产品,只要有递归就会有回溯。回溯函数也就是递归函数,指的都是一个函数

基本问题

  • 组合问题(无序):N个数里面按一定规则找出k个数的集合
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 排列问题(有序):N个数按一定规则全排列,有几种排列方式
  • 棋盘问题:N皇后,解数独等等

 解题模版

所有回溯问题都可以抽象为一个树问题。

返回值和参数

一般返回值都是void。参数需要根据实际情况确定。

void backtracking(参数)

终止条件

类似树的结构,一般是找到叶子节点之后返回,必要的时候需要保存结果。

if (终止条件) {存放结果;return;
}

遍历过程

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

需要注意集合大小和分支数量是对应的。以及在回溯过程当中在每一次回溯之后需要撤销这一步的处理内容。

77. 组合

class Solution(object):def combine(self, n, k):""":type n: int:type k: int:rtype: List[List[int]]"""res = []self.backtracking(n, k, 1, [], res)return resdef backtracking(self, n, k, start_idx, path, res):# 终止条件if len(path) == k:res.append(path[:])  # 加入resreturn  # 回溯for i in range(start_idx, n + 1):path.append(i)self.backtracking(n, k, i + 1, path, res)  # 起始位置变成i+1path.pop()  # 回溯

 第24天完结🎉

http://www.lryc.cn/news/266230.html

相关文章:

  • mysql(49) : 大数据按分区导出数据
  • 阿里云ECS配置IPv6后,如果无法访问该服务器上的网站,可检查如下配置
  • 基于SSM的双减后初小教育课外学习生活活动平台的设计与实现
  • HTTP前端请求
  • 前端性能优化二十四:花裤衩模板第三方库打包
  • 多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测
  • Qt的简单游戏实现提供完整代码
  • SpringMVC之文件的下载
  • 计算机组成原理第6章-(算术运算)【下】
  • 【开题报告】基于微信小程序的校园资讯平台的设计与实现
  • VUE前端导出文件之file-saver插件
  • 【Earth Engine】协同Sentinel-1/2使用随机森林回归实现高分辨率相对财富(贫困)制图
  • C++ 检测 是不是 com组件 的办法 已解决
  • linux buffer的回写的触发链路
  • Lambda表达式超详解
  • 西门子博途与菲尼克斯无线蓝牙模块通讯
  • vue2 之 实现pdf电子签章
  • 什么是MVC?MVC框架的优势和特点
  • 主从复制mysql-replication | Replication故障排除
  • 基于Java SSM框架实现教学质量评价评教系统项目【项目源码+论文说明】计算机毕业设计
  • 03|模型I/O:输入提示、调用模型、解析输出
  • springcloud-gateway-2-鉴权
  • 实现一个最简单的内核
  • 2024华为OD机试真题指南宝典—持续更新(JAVAPythonC++JS)【彻底搞懂算法和数据结构—算法之翼】
  • 【12.23】转行小白历险记-算法02
  • k8s部署nginx-ingress服务
  • SpringBoot Elasticsearch全文搜索
  • Python 常用模块re
  • 【华为OD题库-106】全排列-java
  • Three.js 详细解析(持续更新)