LeetCode 算法:電話號碼的字母組合 c++

原題鏈接🔗:電話號碼的字母組合
難度:中等????

題目

給定一個僅包含數字 2-9 的字符串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。

給出數字到字母的映射如下(與電話按鍵相同)。注意 1 不對應任何字母。

示例 1:
在這里插入圖片描述

輸入:digits = “23”
輸出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]

示例 2:
輸入:digits = “”
輸出:[]

示例 3:
輸入:digits = “2”
輸出:[“a”,“b”,“c”]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范圍 [‘2’, ‘9’] 的一個數字。

題解

  1. 解題思路

LeetCode 上的 “電話號碼的字母組合” 問題要求你根據一個數字電話號碼,生成所有的可能的字母組合。在這個問題中,每個數字鍵對應一組字母,例如:

  • 2 對應 ‘a’, ‘b’, ‘c’
  • 3 對應 ‘d’, ‘e’, ‘f’

解題思路如下:

  1. 理解問題:首先,要清楚每個數字鍵對應的字母組合,以及電話號碼可能的組合方式。

  2. 回溯法:這是一個典型的回溯問題,我們可以使用回溯法來解決。回溯法是一種通過遞歸來搜索所有可能解的方法。

  3. 構建映射:創建一個映射,將每個數字鍵映射到它對應的字母組合。

  4. 遞歸生成組合:使用遞歸函數,每次遞歸調用時,嘗試當前數字鍵的所有可能字母,并將其添加到當前的組合中。

  5. 回溯:在遞歸過程中,如果當前組合的長度等于電話號碼的長度,說明找到了一個有效的組合,將其添加到結果中。然后回溯,移除當前添加的字母,嘗試下一個字母。

  6. 優化:在生成組合的過程中,如果當前數字鍵沒有對應的字母,直接回溯到上一個數字鍵。

下面是這個問題的一般性解題步驟:

  • 定義一個映射 digitToChar,將每個數字映射到對應的字母字符串。
  • 定義一個遞歸函數 backtrack,接收當前的組合 current,當前處理的數字索引 index,以及電話號碼 digits 作為參數。
  • backtrack 函數中,如果 index 等于電話號碼的長度,將當前的組合 current 添加到結果 result 中。
  • 對于當前索引 index,獲取當前數字對應的所有字母,然后對每個字母進行遞歸調用 backtrack,并將字母添加到當前組合 current 中。
  • 在遞歸調用后,需要回溯,即從 current 中移除最后添加的字母。
  1. c++ demo
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;class Solution {
public:vector<string> letterCombinations(string digits) {vector<string> combinations;if (digits.empty()) {return combinations;}unordered_map<char, string> phoneMap{{'2', "abc"},{'3', "def"},{'4', "ghi"},{'5', "jkl"},{'6', "mno"},{'7', "pqrs"},{'8', "tuv"},{'9', "wxyz"}};string combination;backtrack(combinations, phoneMap, digits, 0, combination);return combinations;}void backtrack(vector<string>& combinations, const unordered_map<char, string>& phoneMap, const string& digits, int index, string& combination) {if (index == digits.length()) {combinations.push_back(combination);}else {char digit = digits[index];const string& letters = phoneMap.at(digit);for (const char& letter : letters) {combination.push_back(letter);backtrack(combinations, phoneMap, digits, index + 1, combination);combination.pop_back();}}}
};int main() {Solution solution;std::string digits = "23";std::vector<std::string> combinations = solution.letterCombinations(digits);for (const std::string& combination : combinations) {std::cout << combination << std::endl;}return 0;
}
  1. 代碼倉庫地址:letterCombinations

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

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

相關文章

SpringCloud教程 | 第九篇: 使用API Gateway

1、參考資料 SpringCloud基礎篇-10-服務網關-Gateway_springcloud gateway-CSDN博客 2、先學習路由&#xff0c;參考了5.1 2.1、建了一個cloudGatewayDemo&#xff0c;這是用來配置網關的工程&#xff0c;配置如下&#xff1a; http://localhost:18080/aaa/name 該接口代碼如…

git clone命令, 克隆遠程倉庫

這個應該是最簡單的命令&#xff0c;當別人扔給你一個*****.git鏈接&#xff0c;你要知道怎么用&#xff0c;但是還需要注意以下幾點&#xff1a; 1. 你在該網站上是否有賬號 2. 你在該網站上的賬號是否是該項目的成員&#xff0c;如果不是&#xff0c;那可能clone不了 3. 本機…

WSL-Ubuntu20.04部署環境配置

1.更換Ubuntu軟件倉庫鏡像源 為了在WSL上使用TensorRT進行推理加速&#xff0c;需要安裝以下環境&#xff0c;下面將按以下順序分別介紹安裝、驗證以及刪除環境&#xff1a; #1.C環境配置 gcc、gdb、g #2.gpu環境 cuda、cudnn #3.Cmake環境 CMake #4.OpenCV環境 OpenCV #5.Ten…

vxe-grid 實現配置式form搜索條件 form搜索條件框可折疊 配置式table

文章目錄 效果圖代碼 效果圖 代碼 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

Zoom視頻會議軟件使用

Zoom是一款廣受歡迎的視頻會議軟件&#xff0c;使用它可以輕松地進行遠程會議、在線培訓和團隊協作等。要充分利用Zoom軟件的功能&#xff0c;以下是詳細具體的使用方法和步驟&#xff1a; 下載安裝 下載&#xff1a;訪問Zoom官方網站&#xff0c;根據使用的操作系統下載相應的…

ttkefu在線客服系統 機器人+人工客服 全渠道接入客戶咨詢

ttkefu在線客服系統是一種集成了機器人客服與人工客服&#xff0c;并支持全渠道接入客戶咨詢的綜合解決方案。這種系統能夠顯著提升客戶服務效率&#xff0c;優化客戶體驗&#xff0c;同時幫助企業降低運營成本 1. 智能機器人客服 自動回復&#xff1a;機器人客服能夠自…

Java集合框架的內部揭秘:List、Set與Map的深潛之旅

Java集合框架是一套強大的工具&#xff0c;為開發者提供了靈活的數據管理方式。本文將深入剖析List、Set和Map的內部機制&#xff0c;通過詳細的示例和擴展討論&#xff0c;帶你領略這些數據容器的真諦。 一、List&#xff1a;有序序列的深度剖析 List接口是一個可以包含重復…

自制連點器

B站使用教程&#xff1a;https://www.bilibili.com/video/BV1SR85e4EKw/?vd_source47eba1800d831e86d4778a128740fe73 下載鏈接&#xff1a;鏈接&#xff1a;https://pan.baidu.com/s/1Spv_yVPFB3zoS__VL-nhaQ?pwdyxo1 提取碼&#xff1a;yxo1

20.x86游戲實戰-遠線程注入的實現

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Spring Boot 中,監聽應用程序啟動的生命周期事件的4種方法

文章目錄 前言在 Spring Boot 中&#xff0c;監聽應用程序啟動的生命周期事件有多種方法。你可以使用以下幾種方式來實現&#xff1a; 一、使用 ApplicationListener二、使用 EventListener三、實現 CommandLineRunner 或 ApplicationRunner四、使用 SmartLifecycle總結 前言 …

Spring AI 應用開發中設置訪問 Ollama 的超時時間

使用 Spring AI 開發 AI 應用時&#xff0c;Ollama 通常在本地開發和測試時使用&#xff0c;用來在本地運行大模型。由于本地開發機器的資源限制&#xff0c;當使用 Ollama 運行較大的模型時&#xff0c;大模型給出響應的時間會比較長。Spring AI 提供的 OllamaChatModel 與 Ol…

在Mac上免費恢復誤刪除的Word文檔

Microsoft Word for Mac是一個有用的文字處理應用程序&#xff0c;它與Microsoft Office套件捆綁在一起。該軟件的穩定版本包括 Word 2019、2016、2011 等。 Word for Mac 與 Apple Pages 兼容;這允許在不同的操作系統版本中使用Word文檔&#xff0c;而不會遇到任何麻煩。 與…

【數據結構】非線性表----樹詳解

樹是一種非線性結構&#xff0c;它是由**n&#xff08;n>0&#xff09;**個有限結點組成一個具有層次關系的集合。具有層次關系則說明它的結構不再是線性表那樣一對一&#xff0c;而是一對多的關系&#xff1b;隨著層數的增加&#xff0c;每一層的元素個數也在不斷變化&…

逆向案例二十三——請求頭參數加密,某區塊鏈交易逆向

網址&#xff1a;aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析&#xff0c;發現請求頭有X-Apikey參數加密&#xff0c;其他表單和返回內容沒有加密。 直接搜索關鍵字&#xff0c;X-Apikey&#xff0c;找到疑似加密位置&#xff0c;注意這里…

零基礎學習Python(三)

1. 多重繼承 一個子類可以繼承多個父類&#xff0c;這與一些編程語言的規則不通。 如果多個父類中有同名的變量和方法&#xff0c;子類訪問的順序是按照繼承時小括號里書寫的順序進行訪問的。 可以用issubclass(B, A)方法判斷B是否為A的子類。 2. 綁定 類中的方法通過參數s…

《TF2.x強化學習手冊》P59-P65-SARSA-Q-learning

文章目錄 實現SARSA算法和對應的強化學習智能體前期準備實現步驟工作原理初始化算法流程 構建基于Q學習的智能體前期準備實現步驟工作原理SARSA 算法的收斂性&#xff1a;SARSA 適合在線學習和真實系統&#xff1a;Q 學習算法的適用性&#xff1a; 實現SARSA算法和對應的強化學…

HDC使用常見命令

HDC&#xff08;HarmonyOS Device Connector&#xff09;是為開發人員提供的用于調試的命令行工具&#xff0c;通過該工具可以在windows/linux/mac系統上與真實設備進行交互。 使用HDC前&#xff0c;需要配置相關環境變量&#xff1a; 在此電腦 > 屬性 > 高級系統設置 &g…

Git常用命令以及使用IDEA集成Gitee

目錄 一、設置用戶簽名 二、初始化本地庫 三、查看本地庫狀態 四、添加文件到暫存區 五、提交本地庫 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、創建分支 9.3、切換分支 9.4、合并分支 十、團隊協作 十一、Idea集成Git 11.1、配…

Github 2024-07-15 開源項目周報 Top15

根據Github Trendings的統計,本周(2024-07-15統計)共有15個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目5非開發語言項目4JavaScript項目3TypeScript項目2Go項目1Solidity項目1Java項目1Rust項目1免費編程學習平臺:freeCodeCamp.org 創建…

3.1-RNN存在的問題以及LSTM的結構

文章目錄 1 RNN存在的問題1.1梯度消失問題1.2梯度爆炸問題1.3梯度爆炸的對策 2梯度消失的對策——LSTM2.1輸出門2.2遺忘門2.3輸入門2.4總結2.5 LSTM梯度的流動 1 RNN存在的問題 RNN存在梯度消失和梯度爆炸的問題。 書上以下圖的這句話為例&#xff0c;進行說明&#xff1b;為了…