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
英文地址,請注明出處:http://en.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…