LeetCode力扣-hot100系列(5)

这一篇主要讲一讲回溯,除了N皇后问题是困难题,不过N皇后知道了咋做也不难。回溯整体上还是好做的,直到套路容易做出来,题目容易理解。

回溯

[1]全排列

问:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

切片是引用,如果使用result = append(reslut,result1),result1也是切片,那么result保存的都是指向同一个切片,不过会开辟空间。


func permute(nums []int) [][]int {result := [][]int{}var process func(index int)process = func(index int) {if index == len(nums) {tmp := make([]int, len(nums))copy(tmp, nums)result = append(result, tmp)return}for i := index; i < len(nums); i++ {nums[index], nums[i] = nums[i], nums[index]process(index + 1)nums[index], nums[i] = nums[i], nums[index]}}process(0)return result
}

[2]子集

问:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

考虑选不选问题,而不需要遍历整个数组,只需要考虑当前元素。

func subsets(nums []int) [][]int {result := [][]int{}result1 := []int{}var process func(index int)process = func(index int) {if index==len(nums){tmp := make([]int,len(result1))copy(tmp,result1)result = append(result, tmp)return }process(index+1)result1 = append(result1, nums[index])process(index+1)result1 = result1[:len(result1)-1]}process(0)return result
}

[3]电话号码的字母组合

问:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

用哈希表存储数字对应的字母就好。

func letterCombinations(digits string) []string {if len(digits)==0{return []string{}}result := []string{}m := map[int]string{2: "abc",3: "def",4: "ghi",5: "jkl",6: "mno",7: "pqrs",8: "tuv",9: "wxyz"}var process func(index int)result1 := ""process = func(index int) {if index==len(digits){result = append(result, result1)return}var in intin = int(digits[index] - '0')for _,e := range m[in]{result1 = result1 + string(e)process(index+1)result1 = result1[:len(result1)-1]}}process(0)return result
}

[4]括号生成

问:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

主要是考虑当前情况是只能选择(还是能够有两种选择。

func generateParenthesis(n int) []string {result := []string{}str :=  ""var process func(index int,num int,right int)process = func(index int,left int,right int) {if index == 2*n{result = append(result, str)return}if left >0{str += "("process(index+1,left-1,right+1)str = str[:len(str)-1]}if right>0{str += ")"process(index+1,left,right-1)str = str[:len(str)-1]}}process(0,n,0)return result
}

[5]组合总和

问:给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

func combinationSum(candidates []int, target int) [][]int {var process func(index int)total := 0result := [][]int{}result1 := []int{}process = func(index int) {if total == target{tmp := make([]int,len(result1))copy(tmp,result1)result = append(result, tmp)return}if total > target{return}for i:=index;i<len(candidates);i++{if candidates[i]==0{continue}total += candidates[i]result1 = append(result1, candidates[i])process(i)result1 = result1[:len(result1)-1]total -= candidates[i]}}process(0)return result
}

[6]单词搜索

问:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

这个回溯需要依赖外层双循环,因为每个process只会判断当前位置是否能够满足。注意的是需要临时修改用过的格子的值,避免重复使用。

func exist(board [][]byte, word string) bool {length := len(board)high := len(board[0])flag := falsevar process func(x, y int, index int)process = func(x, y int, index int) {if index == len(word) {flag = truereturn}if x < 0 || y < 0 || x >= length || y >= high {return}if board[x][y] == word[index] {tmp := board[x][y]board[x][y] = '0'process(x+1, y, index+1)process(x, y+1, index+1)process(x, y-1, index+1)process(x-1, y, index+1)board[x][y] = tmp}}for i := 0; i < length; i++ {for j := 0; j < high; j++ {process(i, j, 0)}}return flag
}

[7]分割回文串

问:给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

写这道题的时候依然犯了一个致命的错误,切片是索引,如果将result1保存到result中会导致出乎意料的结果!不过这里将每次传递空字符串其实有点傻,可以改进。

func partition(s string) [][]string {result := [][]string{}result1 := []string{}var isTure func(str string) boolisTure = func(str string) bool {left := 0right := len(str)-1for left < right {if str[left]!=str[right]{return false}left++right--}return true}var process func(index int,str string)process = func(index int,str string) {if index==len(s){temp := make([]string, len(result1))copy(temp, result1)result = append(result, temp)return}for i:=index;i<len(s);i++{str += string(s[i])if isTure(str){result1 = append(result1, str)process(i+1,"")result1 = result1[:len(result1)-1]}}return}process(0,"")return result
}

[8]N皇后

问:按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98904.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习05——多分类学习与类别不平衡(一对一、一对其余、多对多)

上一章&#xff1a;机器学习04——决策树 下一章&#xff1a;机器学习06——支持向量机 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、多分类学习&#xff08;一&#xff09;…

2025.9.11总结

阅读《拿铁因素》有感昨天看完《拿铁因素》&#xff0c;这本书让我明白&#xff0c;如果不去主动去管理自己的财务&#xff0c;解决自己从前的财务问题&#xff0c;我很难过上自己想要的生活。今天就所读的内容&#xff0c;探究如何将这本书的内容运用到自己的一个日常生活中。…

Android,Jetpack Compose,坦克大战游戏案例Demo

代码如下&#xff08;这只是个简单案例而已&#xff09;&#xff1a; package com.example.myapplicationimport android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas impo…

zookeeper是啥

ZooKeeper是一个开源的分布式协调服务&#xff0c;主要用于解决分布式系统中的数据一致性、状态同步和协作问题‌。它通过提供高可用、强一致性的服务&#xff0c;成为分布式系统的“指挥中心”‌。以下是其核心功能和应用场景&#xff1a;核心功能 分布式同步‌ 通过原子广播协…

【开题答辩全过程】以 基于Android的智慧旅游APP开发为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

如何选择?SEO 与 GEO 的 5 个核心分野

在 30 秒内&#xff0c;以下是您需要了解的有关 SEO 和 GEO 之间差异的信息&#xff1a; SEO&#xff08;搜索引擎优化&#xff09;&#xff1a;让您的网站出现在 Google 搜索中。目标&#xff1a;吸引用户点击您的链接。GEO&#xff08;生成引擎优化&#xff09;&#xff1a;…

基于MATLAB的光学CCD全息成像仿真程序实现

基于MATLAB的光学CCD全息成像仿真程序实现一、流程 #mermaid-svg-g3dkhZSC3Go4a2kH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-g3dkhZSC3Go4a2kH .error-icon{fill:#552222;}#mermaid-svg-g3dkhZSC3Go4a2kH .er…

Java大厂面试实录:产业互联网大数据与AI服务场景下的微服务与智能搜索(含详细解读)

Java大厂面试实录&#xff1a;产业互联网大数据与AI服务场景下的微服务与智能搜索&#xff08;含详细解读&#xff09; 场景开场 &#x1f3ed;&#x1f984; 午后阳光正好&#xff0c;王老登背着“Java一把梭”的背包&#xff0c;精神抖擞地走进了产业互联网大数据与AI服务大厂…

Win_Server远程桌面(RDP)服务调用GPU并提上传输帧率和USB设备重定向

说明&#xff1a;Windows远程桌面服务&#xff08; RDP &#xff09;&#xff0c;RDP服务是可以无显卡运行的&#xff0c;显示远程桌面的时候并不调用显卡&#xff0c;可以做一些基本的管理操作&#xff0c;为提升RDP的性能&#xff0c;可以开启显卡加速&#xff08; OpenGL&am…

Docker(⑤Kali Linux-HexStrike AI安装)

卸载 WSL 里的 Ubuntuwsl --unregister Ubuntu查看当前已安装的发行版wsl --list --verbose下载kali-linuxwsl --install -d kali-linuxKali 服务端安装sudo apt update && sudo apt upgrade -y sudo apt install python3 python3-venv python3-pip git -y克隆源码 &am…

查找算法和递推算法

查找算法题目 1&#xff1a;找班级里的 “小明星”题目描述&#xff1a;班级有 10 个同学的编号&#xff08;1 - 10&#xff09;&#xff0c;输入一个编号&#xff0c;判断是否是 “小明星”&#xff08;假设编号为 5 的是小明星&#xff09;&#xff0c;是就输出 “找到小明星…

2025 年PT展前瞻:人工智能+如何走进普通人的生活?

导读&#xff1a;2025年&#xff0c;人工智能正在加速融入日常生活&#xff0c;提升着每一个普通人的幸福感与获得感。清晨&#xff0c;智能手环在你最浅的睡眠阶段轻柔震动&#xff0c;用最科学的方式将你唤醒&#xff1b;通勤路上&#xff0c;智能网联汽车早已规划好躲避拥堵…

1-机器学习与大模型开发数学教程-第0章 预备知识-0-1 集合与逻辑基础(集合运算、命题逻辑、量词)

在正式进入机器学习与大模型的数学核心之前&#xff0c;我们需要先打好“语言”和“逻辑”的基础。 这一章会从 集合与逻辑 入手&#xff0c;它们就像是编程中的语法规则&#xff1a; 集合告诉我们“对象属于不属于某个范围”&#xff1b;逻辑告诉我们“命题对不对、能不能推出…

字节 Trae vs 腾讯 CodeBuddy vs 阿里 Qoder:三大 AI-IDE 集成 OneCode 深度对比与体验测评

一、对比背景&#xff1a;AI-IDE 与低代码融合的行业必然性 在低代码开发进入 “AI 赋能期” 的 2025 年&#xff0c;AI 驱动的集成开发环境&#xff08;AI-IDE&#xff09;已成为低代码平台效率提升的核心载体。全球 AI-IDE 市场规模突破 50 亿美元&#xff0c;年增长率超 70…

DeerFlow 与 MCP 区别深度解析

目录 引言 一、DeerFlow 与 MCP 的详细概念说明 1. DeerFlow&#xff1a;面向研究自动化的多智能体应用框架 2. MCP&#xff1a;连接 AI 模型与外部系统的标准化通信协议 二、核心定位&#xff1a;应用框架与通信协议的本质 1. 角色不同 2. 技术架构 三、功能特性&…

视觉对象类型

矩形类型 对于最基本的视觉效果,Qt Quick 提供了一种绘制矩形的类型。这些矩形可以用颜色或垂直渐变着色。该类型还可以在矩形上绘制边框。 若要绘制矩形以外的自定义形状,请参阅类型或使用该类型显示预渲染图像。 import QtQuickItem {width: 320h

排序---选择排序(Selection Sort)

一、选择排序的基本概念 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法&#xff0c;其核心思想是每次从待排序元素中找到最值&#xff08;最小值或最大值&#xff09;&#xff0c;将其放到已排序序列的末尾&#xff0c;重复此过程直到所有元素完成排…

前端菜单权限方案

方案一&#xff1a;前端全量配置路由表 后端返回权限码思路所有可能的路由都在前端 router 中静态配置好&#xff08;就像你现在这样&#xff09;。登录后&#xff0c;后端返回当前用户的菜单权限&#xff08;通常是一个权限 code 列表&#xff09;。前端根据权限码过滤掉无权…

spring项目部署后为什么会生成 logback-spring.xml文件

以下内容为豆包生成&#xff0c;此处仅做记录在 Spring 项目&#xff08;尤其是 Spring Boot 项目&#xff09;部署后生成 logback-spring.xml 文件&#xff0c;通常有以下几种原因&#xff1a;1. 项目打包时主动包含了该文件logback-spring.xml 是 Logback 日志框架在 Spring …

如何解决pip安装报错ModuleNotFoundError: No module named ‘vaex’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘vaex’问题 摘要 在Python开发过程中&#xff0c;使用pip install时遇到错误是非常常见的情况。特别是在使用PyCharm等集成开发环境&#xff08;IDE&#xff0…