回溯例題(leetcode17/37)

文章目錄

  • leetcode37
  • leetcode17

回溯跟枚舉差不多。要注意“回溯”,別忘記“回”之前把之前的改動都復原。

leetcode37

在這里插入圖片描述

leetcode37是解數獨問題。本題保證有且僅有唯一解。

思路:先把空格子的位置存下來,然后對每一個空位置挨個枚舉1-9。枚舉之前,先建立一個一維數組,把要排除的數先排除,效率會高些。

class Solution {// 空格的信息int x[100], y[100], cnt = 0;bool dfs(int i, vector<vector<char>>& board) {if (i == cnt) return true;bool s[60] = {false};// 檢查行、列for (int j = 0; j < 9; j++) s[board[x[i]][j]] = s[board[j][y[i]]] = true;// 檢查九宮格for (int j = x[i] / 3 * 3; j < x[i] / 3 * 3 + 3; j++)for (int k = y[i] / 3 * 3; k < y[i] / 3 * 3 + 3; k++)s[board[j][k]] = true;// 枚舉嘗試1-9for (char c = '1'; c <= '9'; c++) {if (s[c] == false) {board[x[i]][y[i]] = c;if (dfs(i + 1, board))return true;}}board[x[i]][y[i]] = '.';return false;}public:void solveSudoku(vector<vector<char>>& board) {// 檢索空格子for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {if (board[i][j] == '.') {x[cnt] = i;y[cnt++] = j;}}}dfs(0, board);return;}
};

leetcode17

在這里插入圖片描述
leetcode17是純純的枚舉問題。

逐位處理那串數字,把記錄好的當作參數string alreadyHave。由于這個形參是每遞歸一下就新開辟一個棧幀,所以這樣寫不涉及到“改動復原”的事。如果占用空間太大了,就需要把這個參數改為引用,那么就需要“復原”了。

class Solution {vector<string> ans;string d;void dfs(int index, string alreadyHave) // index是待處理下標{if (index == d.length()) {if (alreadyHave != "")ans.push_back(alreadyHave);return;}int num = d[index] - '0', start, end;if (num >= 2 && num <= 7) {start = (num - 2) * 3 + 'a';end = start + 2;}if (num == 7)end++;if (num == 8) {start = 't';end = 'v';}if (num == 9) {start = 'w';end = 'z';}for (int i = start; i <= end; i++) {dfs(index + 1, alreadyHave + (char)(i));}return;}public:vector<string> letterCombinations(string digits) {d = digits;dfs(0, "");return ans;}
};

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

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

相關文章

Excel常用公式總結非常實用

16個最實用的Excel萬能公式 1、多條件判斷 IF(And(條件1,條件2..條件N),條件成立返回值) IF(or(條件1,條件2..條件N),條件成立返回值) 2、多條件查找 Lookup(1,0/((條件1*條件2*...條件N)),返回值區域&#xff09; 3、多條件求和 Sumifs(值區域,判斷區域1,條件1,判斷區域2,條…

Java 數據庫面試題解析(下)

20. Hash索引和B樹索引的區別&#xff1f;【重點】 hash索引&#xff1a;等值查詢效率高&#xff0c;不能排序&#xff0c;不能進行范圍查詢&#xff1b; B樹索引&#xff1a;數據有序&#xff0c;適合范圍查詢。 21. MySQL中三種鎖的級別&#xff1f;【了解】 表級鎖&…

2024最新精華版Java面試題之spring篇

目錄 一、Java面試題之spring篇 1、什么是spring? 2、你們項目中為什么使用Spring框架&#xff1f; 3、 Autowired和Resource關鍵字的區別&#xff1f; 4、依賴注入的方式有幾種&#xff0c;各是什么? 5、講一下什么是Spring容器&#xff1f; 6、說說你對Spring MVC的理…

Java畢業設計-基于springboot開發的私人健身與教練預約系統-畢業論文+答辯PPT(有源代碼)

文章目錄 前言一、畢設成果演示&#xff08;源代碼在文末&#xff09;二、畢設摘要展示1.開發說明2.需求分析3、系統功能結構 三、系統實現展示1、系統功能模塊2、后臺功能模塊2.1管理員功能2.2用戶功能2.3教練功能 四、畢設內容和源代碼獲取總結 [Java畢業設計-基于springboot…

Android 11.0 內置google tts語音包功能實現

1.前言 在11.0的系統rom產品開發中,在gms的相關項目對于文字轉語音包功能不是內置功能,需要自己下載google的tts語音包,然后內置,在設置 google tts語音包apk作為默認的tts語音引擎功能,接下來分析實現這個功能 2.內置google tts語音包功能實現的核心類 frameworks/ba…

Chat GPT4.0:開啟智能對話的新紀元

介紹 Chat GPT4.0是基于GPT4.0架構開發的一款強大的智能對話模型。作為人工智能領域的最新進展&#xff0c;Chat GPT4.0引領著智能對話技術的新紀元。本文將探討Chat GPT4.0的創新之處以及對智能對話發展的推動作用。 Chat GPT4.0的創新之處 Chat GPT4.0在前一版本的基礎上進…

c++知識點之 --引用

本質&#xff1a;給變量起別名 語法&#xff1a;數據類型 &別名 原名 特點&#xff1a;傳引用比傳值的效率高很多 注意事項&#xff1a; 引用必須初始化&#xff0c;且初始化不能為空。引用不能改變引用關系&#xff08;引用的底層是指針常量&#xff08;type * const …

前端 JS 經典:for-in 和 for-of 用法區別

1. for-in 對于 string, object, array 類型使用 for-in const str "qwe"; const arr ["yqcoder", "db"]; const obj {name: "yqcoder",age: 18, };for (let i in str) {console.log(i); // 0 1 2 } for (let i in arr) {console…

簡單數據類型和復雜數據類型

1. 簡單數據類型 null是個特例: 2. 復雜數據類型 3. 堆和棧 注意&#xff1a; JavaScript 中是沒有堆和棧的概念的&#xff0c;通過堆棧的概念可以更好的理解代碼的一些執行方式&#xff0c;便于將來學習其他語言。 4. 簡單數據類型傳參 總結&#xff1a;簡單數據類型傳參傳…

webview_h5與原生增加權限索取行為交互(Flutter)

應各大應用市場上架要求,增加權限索取行為用戶交互彈窗 詳細: https://developer.huawei.com/consumer/cn/doc/app/FAQ-faq-05#h1-1698326401789-0 flutter端使用permission_handler申請權限注冊一個MethodChannel,增加一個函數,提供安卓webview相機/麥克風等權限被觸發時回調…

C++寫入和讀取結構體到二進制文件

二進制文件速度快&#xff0c;空間效率高 寫入數據到二進制文件 #include<iostream> #include<fstream> using namespace std; int main() {// 定義一個結構體struct student{int id; // 學號char name[20]; // 姓名double score; // 成…

LeetCode 2369.檢查數組是否存在有效劃分:動態規劃(DP)

【LetMeFly】2369.檢查數組是否存在有效劃分&#xff1a;動態規劃(DP) 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/ 給你一個下標從 0 開始的整數數組 nums &#xff0c;你必須將數組劃分為一個或多個 連續 子…

在線ai寫作,讓你隨時隨地創作優質內容

如今的ai技術已經滲透到我們生活的方方面面。其中&#xff0c;AI寫作成為了一個備受關注的領域。如今&#xff0c;我們可以利用在線ai寫作在任何時間、任何地點創作出優質的內容。 傳統的寫作過程需要大量的時間和精力。從構思到寫作再到修改&#xff0c;每一個環節都需要我們投…

Linux進程管理——top字段

目錄 1.top下半部分——進程狀態 2.top常用內部命令 3.top指定 ①top ②top -d 1 ③top -d 1 -p 10126 ④top -d 1 -p 10126,1 4.使用信號控制進程 1.top下半部分——進程狀態 PID&#xff1a;進程號 User&#xff1a;用戶 PR/NI&#xff1a;優先級 VIRT&#xff08…

Helm repo 國內鏡像配置

微軟 http://mirror.azure.cn/kubernetes/charts/ 阿里云 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts/ 步驟 helm repo add stable http://mirror.azure.cn/kubernetes/charts/ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/char…

國產軟件很流氓?不,這些國產軟件良心且實用,別讓它們寒心

談及國產軟件&#xff0c;人們常將其與“流氓、捆綁、滿屏廣告”等負面詞匯掛鉤。但真實情況是&#xff0c;仍有許多優質國產軟件在默默耕耘&#xff0c;它們既免費又實用&#xff0c;別讓它們寒了心。 1、Dism Dism是一款專為Windows系統設計的管理優化神器&#xff0c;其開…

ECMAScript 6+ 新特性 ( 六 ) 模塊化

2.17. 模塊化 模塊化是指將一個大的程序文件&#xff0c;拆分成許多小的文件&#xff0c;然后將小文件組合起來。 這樣就可以更清晰和結構化的方式組織代碼 模塊功能主要由兩個命令構成&#xff1a;export 和 import export 命令用于規定模塊的對外接口 ( 公開 , 暴露) im…

PowerShell 詳細介紹

PowerShell 是微軟開發的一款功能強大的命令行工具和腳本語言&#xff0c;它基于 .NET Framework 構建&#xff0c;可以幫助系統管理員和開發者自動化各種系統管理和應用程序開發任務。PowerShell 提供了豐富的命令集和腳本功能&#xff0c;可以輕松地管理 Windows 操作系統、應…

呦呵,阿里云果然是良心云

關注盧松松&#xff0c;會經常給你分享一些我的經驗和觀點。 你聽說了嗎?阿里云全線降價20%&#xff0c;還上了熱搜。2024年一開年&#xff0c;看來阿里云殺紅了眼&#xff0c;云市場即將變天。 現在續費的阿里云主機&#xff0c;續費三年和續費兩年的價錢差不多&#xff0…

更先進的功能,無注意力大模型Eagle7B:基于RWKV,推理成本降低10-100 倍,另一個工具包使得大模型推理性能加速達40倍(附詳細代碼使用舉例)

更先進的功能,無注意力大模型Eagle7B:基于RWKV,推理成本降低10-100 倍,另一個工具包使得大模型推理性能加速達40倍(附詳細代碼使用舉例)。 在 AI 賽道中,與動輒上千億參數的模型相比,最近,小模型開始受到大家的青睞。比如法國 AI 初創公司發布的 Mistral-7B 模型,其…