Day130 | 靈神 | 回溯算法 | 子集型 電話號碼的字母組合

Day130 | 靈神 | 回溯算法 | 子集型 電話號碼的字母組合

17.電話號碼的字母組合

17. 電話號碼的字母組合 - 力扣(LeetCode)

思路:

image-20250605202058174

筆者用index代替i,這里的index其實就是digits數組的下標

按照靈神的回溯三問,那就是

1.當前的操作:找到本層要給path[index]里面填入哪個字母,很明顯的是每層就是一個數字的那幾個字母,所以就是選定一個數字然后從它的字母中選一個

2.子問題:構造字符串>=index的部分,其實也就是說明經過了index層選擇之后,我們已經確定了i位字母

3.下一個子問題:構造字符串>=index+1的部分,就是說明我們下一層的遞歸參數是index+1,因為我們已經在本層的字母中選擇了一個,所以要繼續往下走了,表現在數組上就是繼續往下遍歷digits

注意的細節:

映射的建立,下標要對上數字,也就是讓映射的數組從下標2開始而不是0,這樣會方便很多

完整代碼:

class Solution {
public:vector<string> res;vector<string> s{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};void backtracking(string digits,string path,int index){if(index==digits.size()){res.push_back(path);return ;}int n=(int)(digits[index]-'0');for(int i=0;i<s[n].size();i++){path.push_back(s[n][i]);backtracking(digits,path,index+1);path.pop_back();}}vector<string> letterCombinations(string digits) {if(digits.size()==0)return res;string path;backtracking(digits,path,0);return res;}
};

靈神代碼:

靈神沒有"恢復現場"這一步,是因為靈神把path初始化為全0的字符串,并且在遞歸中直接覆蓋了對應的值,而恰巧字符串返回時的長度全都是digits數組的長度,所以把path放入結果集的時候肯定path數組都會被覆蓋一遍

class Solution {const string MAPPING[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};public:vector<string> letterCombinations(string digits) {int n = digits.length();if (n == 0) {return {};}vector<string> ans;string path(n, 0); // 注意 path 長度一開始就是 n,不是空串auto dfs = [&](this auto&& dfs, int i) {if (i == n) {ans.emplace_back(path);return;}for (char c : MAPPING[digits[i] - '0']) {path[i] = c; // 直接覆蓋dfs(i + 1);}};dfs(0);return ans;}
};

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

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

相關文章

深入理解JavaScript設計模式之閉包與高階函數

前言小序 一場失敗面試 2023年的某一天&#xff0c;一場讓我印象深刻的面試&#xff1a; 面試官&#xff1a; “你了解閉包嗎&#xff1f;請說一下你對閉包的理解。” 我自信滿滿地答道&#xff1a; “閉包就是函數里面套函數&#xff0c;里面的函數可以訪問外部函數的變量。…

使用 Spring Boot 3.3 和 JdbcTemplate 操作 MySQL 數據庫

在現代的 Java 應用開發中&#xff0c;Spring Boot 提供了強大的工具來簡化數據庫操作。JdbcTemplate 是 Spring 提供的一個核心類&#xff0c;用于簡化 JDBC 操作&#xff0c;減少樣板代碼。本文將介紹如何在 Spring Boot 3.3 項目中使用 JdbcTemplate 來操作 MySQL 數據庫&am…

如何做好一份技術文檔?(下篇)

如何做好一份技術文檔&#xff1f;&#xff08;下篇&#xff09; 下篇&#xff1a;文檔體驗的極致優化 ——從可用性到愉悅性的跨越 文檔用戶體驗地圖 新手路徑 專家路徑 [安裝] → [配置] → [示例] [API] → [參數] → [源碼] │ ▲ …

Windows 12確認沒了,Win11 重心偏移修Bug

微軟悄然擱置了傳說中的Windows 12開發計劃&#xff0c;轉身將精力投入到Windows 11的持續進化中。今年秋季的主角已經確定——Windows 11 25H2&#xff0c;它將于9月或10月間與我們正式見面。 與去年24H2的大規模更新不同&#xff0c;25H2更像是場精心策劃的“功能解鎖”。微軟…

JavaScript中的正則表達式:文本處理的瑞士軍刀

JavaScript中的正則表達式&#xff1a;文本處理的瑞士軍刀 在編程世界中&#xff0c;正則表達式&#xff08;Regular Expression&#xff0c;簡稱RegExp&#xff09;被譽為“文本處理的瑞士軍刀”。它能夠高效地完成字符串匹配、替換、提取和驗證等任務。無論是前端開發中的表…

基于LEAP模型在能源環境發展、碳排放建模預測及分析中實踐應用

在國家“3060”碳達峰碳中和的政策背景下&#xff0c;如何尋求經濟-能源-環境的平衡有效發展是國家、省份、城市及園區等不同級別經濟體的重要課題。根據國家政策、當地能源結構、能源技術發展水平以及相關碳排放指標制定合理有效的低碳能源發展規劃需要以科學準確的能源環境發…

Python爬蟲實戰:研究RoboBrowser庫相關技術

1. 引言 1.1 研究背景與意義 隨著電子商務的快速發展,商品信息呈現爆炸式增長。據 Statista 數據顯示,2025 年全球電子商務銷售額預計將達到 7.4 萬億美元,海量的商品數據蘊含著巨大的商業價值。對于電商企業而言,及時獲取競爭對手的產品信息、價格動態和用戶評價,能夠幫…

JVM垃圾回收器-ZGC

一、概述 ZGC&#xff08;Z Garbage Collector&#xff09;是一種高效且可擴展的低延遲垃圾回收器。在垃圾回收過程中&#xff0c;ZGC通過優化算法和硬件支持&#xff0c;將Stop-The-World&#xff08;STW&#xff09;時間控制在一毫秒以內&#xff0c;使其成為追求低延遲應用…

區間動態規劃

線性 DP 的一種&#xff0c;簡稱為「區間 DP」。以「區間長度」劃分階段&#xff0c;以兩個坐標&#xff08;區間的左、右端點&#xff09;作為狀態的維度。一個狀態通常由被它包含且比它更小的區間狀態轉移而來。 一、概念 間 DP 的主要思想就是&#xff1a;先在小區間內得到…

4. 數據類型

4.1 數據類型分類 分類 數據類型 說明 數值類型 BIT(M) 位類型。M指定位數&#xff0c;默認值1&#xff0c;范圍1 - 64 TINYINT [UNSIGNED] 帶符號的范圍 -128 ~ 127&#xff0c;無符號范圍0 ~ 255&#xff0c;默認有符號 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 帶符號是…

設計模式-2 結構型模式

一、代理模式 1、舉例 海外代購 2、代理基本結構圖 3、靜態代理 1、真實類實現一個接口&#xff0c;代理類也實現這個接口。 2、代理類通過真實對象調用真實類的方法。 4、靜態代理和動態代理的區別 1、靜態代理在編譯時就已經實現了&#xff0c;編譯完成后代理類是一個實際…

vue+element-ui一個頁面有多個子組件組成。子組件里面有各種表單,實現點擊enter實現跳轉到下一個表單元素的功能。

一個父組件里面是有各個子組件的form表單組成的。 我想實現點擊enter。焦點直接跳轉到下一個表單元素。 父組件就是由各個子組件構成 子組件就像下圖一樣的都有個el-form的表單。 enterToTab.js let enterToTab {}; (function() {// 返回隨機數enterToTab.addEnterListener …

Open SSL 3.0相關知識以及源碼流程分析

Open SSL 3.0相關知識以及源碼流程分析 編譯 windows環境編譯1、工具安裝 安裝安裝perl腳本解釋器、安裝nasm匯編器(添加到環境變量)、Visual Studio編譯工具 安裝dmake ppm install dmake # 需要過墻2、開始編譯 # 1、找到Visual Studio命令行編譯工具目錄 或者菜單欄直接…

【Redis】筆記|第5節|Redisson實現高并發分布式鎖核心源碼

一、加鎖流程 1. 核心方法調用鏈 RLock lock redisson.getLock("resource"); lock.lock(); // 阻塞式加鎖? lockInterruptibly()? tryAcquire(-1, leaseTime, unit) // leaseTime-1表示啟用看門狗? tryAcquireAsync()? tryLockInnerAsync() // 執行Lua腳本 2…

基于React + TypeScript構建高度可定制的QR碼生成器

前言 在現代Web應用中&#xff0c;QR碼已成為連接線上線下的重要橋梁。本文將詳細介紹如何使用React TypeScript Vite構建一個功能強大、高度可定制的QR碼生成器&#xff0c;支持背景圖片、文本疊加、HTML模塊、圓角導出等高級功能。 前往試試 項目概述 技術棧 前端框架:…

【MATLAB代碼】制導——三點法,二維平面下的例程|運動目標制導,附完整源代碼

三點法制導是一種導彈制導策略,主要用于確保導彈能夠準確追蹤并擊中移動目標。該方法通過計算導彈、目標和制導站之間的相對位置關系,實現對目標的有效制導。 本文給出MATLAB下的三點法例程,模擬平面上捕獲運動目標的情況訂閱專欄后可直接查看源代碼,粘貼到MATLAB空腳本中即…

Ubuntu22.04 安裝 IsaacSim 4.2.0

1. 從官網下載 IsaacSim 4.2.0 安裝包 https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone%404.2.0-rc.18%2Brelease.16044.3b2ed111.gl.linux-x86_64.release.zip 2. 查閱 Workstation Installation 安裝方式 Workstation Installation — Isaac Sim Do…

開源量子模擬引擎:Quantum ESPRESSO本地部署教程,第一性原理計算輕松入門!

一、介紹 Quantum ESPRESSO 是一個用于電子結構計算和納米尺度材料建模的開源計算機代碼集成套件&#xff0c;專門用于進行第一性原理&#xff08;第一性原理&#xff09;計算&#xff0c;涵蓋了電子結構、晶體學和材料性能的模擬。 Quantum ESPRESSO GPU 版本支持GPU加速&am…

PVE 虛擬機安裝 Ubuntu Server V24 系統 —— 一步一步安裝配置基于 Ubuntu Server 的 NodeJS 服務器詳細實錄1

前言 最近在基于 NodeJS V22 寫一個全棧的項目&#xff0c;寫好了&#xff0c;當然需要配置服務器部署啦。這個過程對于熟手來說&#xff0c;還是不復雜的&#xff0c;但是對于很多新手來說&#xff0c;可能稍微有點困難。所以&#xff0c;我把整個過程全部記錄一下。 熟悉我…

【JUC】深入解析 JUC 并發編程:單例模式、懶漢模式、餓漢模式、及懶漢模式線程安全問題解析和使用 volatile 解決內存可見性問題與指令重排序問題

單例模式 單例模式確保某個類在程序中只有一個實例&#xff0c;避免多次創建實例&#xff08;禁止多次使用new&#xff09;。 要實現這一點&#xff0c;關鍵在于將類的所有構造方法聲明為private。 這樣&#xff0c;在類外部無法直接訪問構造方法&#xff0c;new操作會在編譯…