【代碼隨想錄——回溯算法二周目】

1. 組合總和

在這里插入圖片描述

var (path []intres  [][]int
)func combinationSum(candidates []int, target int) [][]int {path = make([]int, 0)res = make([][]int, 0)dfs(candidates,target,0,0)return res
}func dfs(candidates []int, target int,tempTarget int,start int)  {if tempTarget>target{return}if tempTarget==target{temp := make([]int,len(path))copy(temp,path)res = append(res, temp)return}for i:=start;i<len(candidates);i++{path = append(path, candidates[i])dfs(candidates,target,tempTarget+candidates[i],i)path = path[:len(path)-1]}
}

2. 組合總和2

在這里插入圖片描述
需要先對候選人進行一個排序

2.1 使用used數組

var (res [][]intpath  []intused  []bool
)
func combinationSum2(candidates []int, target int) [][]int {res, path = make([][]int, 0), make([]int, 0, len(candidates))used = make([]bool, len(candidates))sort.Ints(candidates)   // 排序,為剪枝做準備dfs(candidates, 0, target)return res
}func dfs(candidates []int, start int, target int) {if target == 0 {   // target 不斷減小,如果為0說明達到了目標值tmp := make([]int, len(path))copy(tmp, path)res = append(res, tmp)return}for i := start; i < len(candidates); i++ {if candidates[i] > target {  // 剪枝,提前返回break}// used[i - 1] == true,說明同一樹枝candidates[i - 1]使用過// used[i - 1] == false,說明同一樹層candidates[i - 1]使用過if i > 0 && candidates[i] == candidates[i-1]  && used[i-1] == false { continue}path = append(path, candidates[i])used[i] = truedfs(candidates, i+1, target - candidates[i])used[i] = falsepath = path[:len(path) - 1]}
}

2.2 不使用used數組

var (res [][]intpath  []int
)
func combinationSum2(candidates []int, target int) [][]int {res, path = make([][]int, 0), make([]int, 0, len(candidates))sort.Ints(candidates)   // 排序,為剪枝做準備dfs(candidates, 0, target)return res
}func dfs(candidates []int, start int, target int) {if target == 0 {   // target 不斷減小,如果為0說明達到了目標值tmp := make([]int, len(path))copy(tmp, path)res = append(res, tmp)return}for i := start; i < len(candidates); i++ {if candidates[i] > target {  // 剪枝,提前返回break}// i != start 限制了這不對深度遍歷到達的此值去重if i != start && candidates[i] == candidates[i-1] { // 去重continue}path = append(path, candidates[i])dfs(candidates, i+1, target - candidates[i])path = path[:len(path) - 1]}
}

3. 分割回文串

在這里插入圖片描述

var (path []stringres  [][]string
)func partition(s string) [][]string {path = make([]string, 0)res = make([][]string, 0)dfs(s,0)return res
}func dfs(s string, start int) {if len(s) == start { //表明找到了一個切割方案temp := make([]string, len(path))copy(temp, path)res = append(res, temp)}for i := start; i < len(s); i++ {if isPalindrome(s[start:i+1]){//表名當前是一個回文串path = append(path, s[start:i+1])dfs(s,i+1)path = path[:len(path)-1]}}
}func isPalindrome(s string) bool {for i:=0;i<len(s)/2;i++{if s[i]!=s[len(s)-i-1]{return false}}return true
}

4. 復原IP地址

在這里插入圖片描述

var (path []stringres  []string
)func restoreIpAddresses(s string) []string {path = make([]string, 0)res = make([]string, 0)dfs(s, 0, 4)return res
}func dfs(s string, start int, remain int) {if remain == 0 && start == len(s) { //表明找到了一個切割方案temp := path[0]for i := 1; i < len(path); i++ {temp = temp + "." + path[i]}res = append(res, temp)}for i := start; i < start+3 && i < len(s); i++ {if isValidNumber(s[start : i+1]) {//表名當前是一個回文串path = append(path, s[start:i+1])dfs(s, i+1, remain-1)path = path[:len(path)-1]}}
}func isValidNumber(s string) bool {//前導零判斷if len(s) > 1 && s[0] == '0' {return false}//判斷數字大小是否在小于255num, _ := strconv.Atoi(s)if num > 255 {return false}return true
}

5. 子集問題

在這里插入圖片描述

var (path   []intres  [][]int
)
func subsets(nums []int) [][]int {res, path = make([][]int, 0), make([]int, 0, len(nums))dfs(nums, 0)return res
}
func dfs(nums []int, start int) {tmp := make([]int, len(path))copy(tmp, path)res = append(res, tmp)for i := start; i < len(nums); i++ {path = append(path, nums[i])dfs(nums, i+1)path = path[:len(path)-1]}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15984.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django-auth組件

Django-auth組件 1 表結構 我們從python manage.py migrate為我們創建的auth組件內置的表開始看 auth_user&#xff1a;用戶表存儲用戶信息&#xff08;登錄admin后臺&#xff09; 里面的字段分兩類&#xff1a;用戶基本信息&#xff08;用戶名&#xff0c;郵箱&#xff0c;密…

華為OD機試【找出通過車輛最多顏色】(java)(100分)

1、題目描述 在一個狹小的路口&#xff0c;每秒只能通過一輛車&#xff0c;假設車輛的顏色只有 3 種&#xff0c;找出 N 秒內經過的最多顏色的車輛數量。 三種顏色編號為0 &#xff0c;1 &#xff0c;2。 2、輸入描述 第一行輸入的是通過的車輛顏色信息[0,1,1,2] &#xff0…

嵌入式0基礎開始學習 ⅠC語言(4)循環結構

0.問題引入 求0~100數據之和&#xff1a; int sum 0; sum 1234....100; 廢手&#xff0c;那么有沒有一種好的方法取操作呢&#xff1f; int sum 0; int i 1; sum sum i; // sum 01; …

GB28181協議中常用SDP信息的含義

u字段&#xff1a;u行應填寫視音頻文件的URI。該URI取值有兩種方式&#xff1a;簡捷方式和普通方式。簡捷方式直接采用產生該歷史媒體的媒體源&#xff08;如某個攝像頭&#xff09;的設備ID&#xff08;應符合6.1.2的規定&#xff09;以及相關參數&#xff08;如回放類型、下載…

Three.js——二維平面、二維圓、自定義二維圖形、立方體、球體、圓柱體、圓環、扭結、多面體、文字

個人簡介 &#x1f440;個人主頁&#xff1a; 前端雜貨鋪 ?開源項目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;?♂?學習方向&#xff1a; 主攻前端方向&#xff0c;正逐漸往全干發展 &#x1…

在Mac電腦下怎么部署QAnything?

在Mac電腦下部署QAnything&#xff0c;可以選擇使用純Python環境進行部署&#xff0c;這種方式不依賴GPU&#xff0c;適合在Mac等筆記本電腦上運行。以下是基于QAnything的純Python環境安裝教程的步驟[18]&#xff1a; 安裝要求 Python 3.10&#xff08;建議使用Anaconda3來管…

RabbitMQ-默認讀、寫方式介紹

1、RabbitMQ簡介 rabbitmq是一個開源的消息中間件&#xff0c;主要有以下用途&#xff0c;分別是&#xff1a; 應用解耦&#xff1a;通過使用RabbitMQ&#xff0c;不同的應用程序之間可以通過消息進行通信&#xff0c;從而降低應用程序之間的直接依賴性&#xff0c;提高系統的…

功率電感的設計步驟

文章目錄 1&#xff1a;高導磁氣隙&#xff08;鐵氧體&#xff09;1.1設計原理1.2 設計步驟 2 鐵粉芯2.1&#xff1a;設計原理2.2&#xff1a;設計步驟 TI電感設計 學習視頻原鏈接 截圖 1 截圖1 截圖1 截圖 2 截圖2 截圖2 1&#xff1a;高導磁氣隙&#xff08;鐵氧體&#…

基于機器學習判斷面部微表情發現哪些人更容易診有帕金森病

1. 概述 帕金森病&#xff08;Parkinson’s disease&#xff0c;PD&#xff09;是一種慢性、進展性的神經退行性疾病&#xff0c;主要影響運動系統。該病癥以大腦中黑質致密部多巴胺能神經元的逐漸喪失為特征&#xff0c;導致多巴胺&#xff08;一種重要的神經遞質&#xff09…

【Qt】深入探索Qt窗口與對話框:從創建到管理:QDockWidget(浮動窗口)、QDialog(對話框)

文章目錄 前言&#xff1a;1. 浮動窗口2. 對話框介紹2.1. 示例&#xff1a;主窗口中&#xff0c;通過點擊按鈕&#xff0c;彈出一個新的對話框。2.2. 創建自定義對話框2.2.1. 純代碼的方式2.2.2. 圖形化界面的方式 3. 模態對話框 和 非模態對話框4. Qt 內置對話框4.1. 消息對話…

Nginx R31 doc-12-NGINX SSL Termination 安全加密

前言 大家好&#xff0c;我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的&#xff0c;可以參考我的另一個項目&#xff1a; 手寫從零實現簡易版 tomcat minicat nginx 系列 從零手…

Git Submodules:深入理解與應用

在大型項目或跨多個獨立項目的開發中&#xff0c;代碼管理往往變得復雜。Git Submodules 是 Git 提供的一個強大功能&#xff0c;允許你在一個 Git 倉庫&#xff08;稱為父倉庫&#xff09;中嵌套另一個 Git 倉庫&#xff08;稱為子模塊倉庫&#xff09;。本文將詳細介紹 Git S…

Linux/Windows下如何同時運行服務端和客戶端

假設服務端和客戶端程序分別為server.c和client.c注意順序&#xff01; 先運行服務端&#xff0c;后運行客戶端先結束客戶端&#xff0c;后結束客戶端 編譯 gcc -o server server.cgcc -o server client.c運行 # 先運行服務器 ./server# 再運行客戶端 ./client./表示當前目錄…

Hybrid Block Storage for Efficient Cloud Volume Service——論文泛讀

TOS 2023 Paper 論文閱讀筆記整理 問題 傳統桌面和服務器應用程序向云的遷移給底層云存儲帶來了高性能、高可靠性和低成本的挑戰。由于這些傳統應用程序的I/O模式和一致性要求&#xff0c;與采用特定編程模型和范式&#xff08;如MapReduce[22]和RDD[52]&#xff09;的云原生…

香橙派AIpro(OrangePi AIPro)開發板初測評

開發板簡介 最近&#xff0c;我拿到手一款Orange Pi AI Pro 開發板&#xff0c;它是香橙派聯合華為精心打造的高性能AI 開發板&#xff0c;最早發布于2023年12月&#xff0c;其搭載了昇騰AI 處理器&#xff0c;可提供8TOPS INT8 的計算能力&#xff0c;內存提供了8GB 和16GB兩…

基于jeecgboot-vue3的Flowable新建流程定義(一)

因為這個項目license問題無法開源&#xff0c;更多技術支持與服務請加入我的知識星球。 1、vue3版本因為流程分類是動態的&#xff0c;不再固定了&#xff0c;所以新建的時候需要選擇建立哪種流程類型的流程 代碼如下&#xff1a; <!-- 選擇模型的流程類型對話框 -->&…

算法提高之一個簡單的整數問題2

算法提高之一個簡單的整數問題2 核心思想&#xff1a;線段樹 懶標記&#xff1a;add存每個子節點需要加的數pushdown&#xff1a;將懶標記向下存 同時清除本行懶標記 #include <iostream>#include <cstring>#include <algorithm>using namespace std;type…

數據結構(六)圖

2024年5月26日一稿(王道P220) 6.1 圖的基本概念 6.1.1 圖的定義 6.2 圖的存儲及基本操作 6.2.1鄰接矩陣法 6.2.2 鄰接表

python web自動化(分布式測試Grid)

Grid介紹 Selenium Grid 是 Selenium 提供的?個?具&#xff0c;?于?持在多臺計算機上并?運?測試。 它允許將測試分發到不同的機器和瀏覽器組合上&#xff0c;同時收集結果。 1.并?執?測試?例&#xff1a;在不同的機器上并?執?測試?例&#xff0c;從?加速整個測試過…

Vulhub——adminer

文章目錄 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;遠程文件讀取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一個PHP編寫的開源數據庫管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…