力扣17. 電話號碼的字母組合(java 回溯法)

Problem: 17. 電話號碼的字母組合

文章目錄

  • 題目描述
  • 思路
  • 解題方法
  • 復雜度
  • Code

題目描述

在這里插入圖片描述在這里插入圖片描述

思路

題目給定一串數字,要求我們找出所有可能的字母組合,即我們可以窮舉出所有可能的結果,而涉及到窮舉我們自然可以想到利用回溯來解決問題,在本題目中我們選擇給定字符串digits中的每一個字符作為決策階段,具體的:

1.我們先創建一個哈希表將數字與其對應的字符存入(數字作為鍵,所有的字符作為值)
2.編寫,并調用回溯函數,當決策階段等于digits的長度時,將當前的決策路徑添加到結果集合中,否則從digits字符串的第一個字符開始回溯調用!

解題方法

1.創建結果集合result,若當digits為空時,返回空集合;
2.創建一個String類型的數組mappings作為哈希表,索引從0-9,用于存儲數字與其字符的對應關系,其中數字索引作為鍵,所有的字符作為值;
3.創建一個char類型的數組,數組長度為digits字符串的長度,作為回溯過程中的決策路徑
4.編寫并調用回溯函數,參數列表為(String[] mappings, String digits, int k, char[] path),其中由參數mappings 與digits決定參數列表,k表示決策階段,path表示決策路徑

4.1若k等于digits的長度時,表示找到一個字母組合,則將其添加到結果集合result中,
4.2先得到當前決策階段的digits中的數字字符,再通過我們創建的哈希表mappins找出該數字字符對應的所有字母字符
4.3以當前的數字字符對應得所有字母字符開始,遍歷所有得字母字符并開始回溯調用

注意:在上述解題方法中我們沒有顯示地在回溯調用后將當前的決策階段狀態還原(回溯的本質就是一個多狀態轉移)但這并不表示我們沒有實現該操作,而是因為:我們定義的決策階段是一個char類型的數組,再回溯遞歸的調用過程中會將原來索引位置上的值給覆蓋掉,以達到恢復當前決策階段的操作

復雜度

時間復雜度:

最壞時間復雜度: O ( 3 m × 4 n ) O(3^m \times 4^n) O(3m×4n),其中m表示選擇對應只有三個字母的數字的個數,n表示對應四個字母的個數

空間復雜度:

O ( n + m ) O(n + m) O(n+m)

Code

class Solution {//Result listprivate List<String> result = new ArrayList<>();/*** Get the all possible combinations** @param digits The combination given by topic* @return List<String>*/public List<String> letterCombinations(String digits) {if (digits.length() == 0) {return Collections.emptyList();}//Create the reflectionString[] mappings = new String[10];mappings[2] = "abc";mappings[3] = "def";mappings[4] = "ghi";mappings[5] = "jkl";mappings[6] = "mno";mappings[7] = "pqrs";mappings[8] = "tuv";mappings[9] = "wxyz";//Decision pathchar[] path = new char[digits.length()];backtrack(mappings, digits,0, path);return result;}/*** Use backtracking to find all possible combinations** @param mappings Mapping between letters and numbers* @param digits   Combination of numbers given by topic* @param k        Decision stage* @param path     Decision path*/private void backtrack(String[] mappings, String digits, int k, char[] path) {//End conditionif (k == digits.length()) {result.add(new String(path));return;}String mapping = mappings[digits.charAt(k) - '0'];for (int i = 0; i < mapping.length(); ++i) {path[k] = mapping.charAt(i);backtrack(mappings, digits, k + 1, path);}}
}

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

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

相關文章

xv6 中的一些系統調用(下)

〇、前言 本文將會結合源代碼談論 sleep、wakeup 這兩個系統調用。 一、sleep()系統調用 以下是sleep()函數源碼&#xff1a; // Atomically release lock and sleep on chan. // Reacquires lock when awakened. void sleep(void *chan, struct spinlock *lk) {struct pro…

無線且列窄圖片如何轉excel?

寫此文原因&#xff1a;圖片要轉excel&#xff0c;這放以前&#xff0c;是不能實現的功能&#xff0c;但隨著人工智能的蓬勃發展&#xff0c;人們已克服了這一難題&#xff0c;但是&#xff0c;我們知道&#xff0c;要將圖片識別成excel&#xff0c;識別程序首先要先識別圖片中…

如何在小米路由器4A千兆版刷入OpenWRT并通過內網穿透工具實現公網遠程訪問

文章目錄 前言1. 安裝Python和需要的庫2. 使用 OpenWRTInvasion 破解路由器3. 備份當前分區并刷入新的Breed4. 安裝cpolar內網穿透4.1 注冊賬號4.2 下載cpolar客戶端4.3 登錄cpolar web ui管理界面4.4 創建公網地址 5. 固定公網地址訪問 前言 OpenWRT是一個高度模塊化、高度自…

交易歷史記錄20231206 記錄

昨日回顧&#xff1a; select top 10000 * from dbo.CODEINFO A left join dbo.全部&#xff21;股20231206010101 B ON A.CODE B.代碼 left join dbo.全部&#xff21;股20231206CONF D on A.CODED.代碼left join dbo.全部&#xff21;股20231206 G on A.CODEG.代碼 left…

解決前端跨域問題,后端解決方法

Spring CloudVue前后端分離項目報錯&#xff1a;Network Error&#xff1b;net::ERR_FAILED&#xff08;請求跨越&#xff09;-CSDN博客記錄自用

Kafka-快速實戰

Kafka介紹 ChatGPT對于Apache Kafka的介紹&#xff1a; Apache Kafka是一個分布式流處理平臺&#xff0c;最初由LinkedIn開發并于2011年開源。它主要用于解決大規模數據的實時流式處理和數據管道問題。 Kafka是一個分布式的發布-訂閱消息系統&#xff0c;可以快速地處理高吞吐…

阿里云國際基于CentOS系統鏡像快速部署Apache服務

阿里云輕量應用服務器提供了Windows Server系統鏡像和主流的Linux系統鏡像&#xff0c;您可以通過該類鏡像創建純凈、安全、穩定的運行環境。本文以CentOS 7.6系統鏡像為例&#xff0c;介紹如何快速配置Apache服務。 背景信息 注意&#xff0c;阿里云國際通過corebyt注冊并充…

使用rawpy.imread讀取.RAW格式數據和.dng格式數據(附代碼)

.dng格式是一個更兼容、更高效的RAW格式。如果需要在不同軟件之間交換RAW文件&#xff0c;或者需要在軟件中進行大量編輯&#xff0c;那么.dng格式是一個不錯的選擇。 目錄 一、 .dng格式數據和.RAW格式數據二、 .dng格式數據和.RAW格式數據區別三、安裝rawpy包四、讀取.dng格式…

Flask應用基礎入門總結

【1】使用migrate方式進行數據庫連接 使用migrate方式進行數據庫連接需要在終端分別運行三行代碼&#xff1a; #init&#xff08;運行一次即可&#xff09;&#xff08;此db為自己設置的連接數據庫的對象,可以修改&#xff09; flask db init #&#xff08;將orm模型生成遷移…

從零開始搭建企業管理系統(四):集成 Knife4j

集成 Knife4j 前言Knife4j是什么集成 Knife4j引入 pom 依賴添加基礎配置啟動程序測試完善文檔信息編寫配置類修改 UserController修改 UserEntity修改 BaseEntity 文檔效果圖swagger 界面knife4j 界面 前言 前面一小節我們使用postman來進行接口的調試&#xff0c;如果接口一多…

游戲王的題解

目錄 原題&#xff1a; 時間&#xff1a;1s 空間&#xff1a;256M 題目描述 輸入格式 輸出格式 樣例輸入 樣例輸出 題目大意&#xff1a; 主要思路&#xff1a; dp轉移&#xff1a; dp初始化&#xff1a; 代碼&#xff1a; 原題&#xff1a; 時間&#xff1a;1s …

springboot集成knife4j詳細教程

使用原生的swagger作為接口文檔&#xff0c;功能不夠強大&#xff0c;并且默認的ui比較簡陋&#xff0c;不符合大眾審美。所以實際開發中推薦使用knife4j對swagger進行增強。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常簡單&…

深入學習Redis:從入門到實戰

Redis快速入門 1.初識Redis1.1.認識NoSQL1.1.1.結構化與非結構化1.1.2.關聯和非關聯1.1.3.查詢方式1.1.4.事務1.1.5.總結 1.2.認識Redis1.3.安裝Redis1.3.1.依賴庫1.3.2.上傳安裝包并解壓1.3.3.啟動1.3.4.默認啟動1.3.5.指定配置啟動1.3.6.開機自啟 1.4.Redis桌面客戶端1.4.1.R…

【VS Code開發】使用Live Server搭建MENJA小游戲并發布至公網遠程訪問

文章目錄 前言1. 編寫MENJA小游戲2. 安裝cpolar內網穿透3. 配置MENJA小游戲公網訪問地址4. 實現公網訪問MENJA小游戲5. 固定MENJA小游戲公網地址 前言 本篇教程&#xff0c;我們將通過VS Code實現遠程開發MENJA小游戲&#xff0c;并通過cpolar內網穿透發布到公網&#xff0c;分…

C++ //習題3.8 寫出下面各邏輯表達式的值。設a=3,b=4,c=5。

C程序設計 &#xff08;第三版&#xff09; 譚浩強 習題3.8 習題3.8 寫出下面各邏輯表達式的值。設a3&#xff0c;b4&#xff0c;c5。 (1) a b > c && b c (2) a || b c && b - c (3) !(a > b) && !c || 1 (4) !(x a) && (y b…

FastAPI之響應狀態碼

使用FastAPI自定義響應狀態碼 FastAPI 是一個現代、快速的 web 框架&#xff0c;用于構建API服務&#xff0c;它允許你通過Python 3.6及以上版本進行編程。一個重要的API設計是返回合適的響應狀態碼&#xff0c;這可以使得客戶端理解服務端的處理結果。本教程將向你展示如何在…

推出 Amazon EC2 C7i 實例

亞馬遜云科技宣布全面推出由定制的第 4 代英特爾至強可擴展處理器&#xff08;代號為 Sapphire Rapids&#xff09;提供支持的 Amazon Elastic Compute Cloud (Amazon EC2) C7i 實例。這些定制處理器僅在亞馬遜云科技上可用&#xff0c;與其他云提供商使用的基于 x86 的同類英特…

Kafka事務是怎么實現的?Kafka事務消息原理詳解

目錄 一、Kafka事務性消息1.1 介紹Kafka事務性消息1.2 事務性消息的應用場景1.3 Kafka事務性消息的優勢 二、Kafka事務性消息的使用2.1 配置Kafka以支持事務性消息生產者配置消費者配置 2.2 生產者&#xff1a;發送事務性消息創建Kafka生產者開始事務發送消息提交或中止事務 2.…

logstash之grok插件自定義規則學習

文章目錄 1、前言2、Grok提供的常用Patterns說明及舉例2.1 常用的表達式說明 3、使用grok插件進行日志字段處理4、案例1&#xff1a;處理nginx的日志4.1、查看nginx日志格式4.2、對nginx的日志進行過濾處理 5、案例2&#xff1a;處理tomcat的日志5.1、[安裝logstash-filter-mul…