【回溯算法2】

力扣17.電話號碼的字母組合

鏈接: link

思路

這道題容易想到用嵌套的for循環實現,但是如果輸入的數字變多,嵌套的for循環也會變長,所以暴力破解的方法不合適。
可以定義一個map將數字和字母對應,這樣就可以獲得數字字母的映射了,遞歸中index參數理解成遍歷過的第幾個數字,也可以想成二叉樹的深度,當index值等于digits長度時表示已經遞歸到葉子節點,要結束遞歸了。
關于把回溯問題想成二叉樹的思路,可以參照之前寫的回溯1的思路

class Solution {List<String> res = new ArrayList<>();// 保存最后結果public List<String> letterCombinations(String digits) {if(digits == null || digits.length() == 0){return res;}//初始對應所有的數字,為了直接對應2-9,新增了兩個無效的字符串""String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};backTrace(digits,numString,0);return res;}StringBuilder  sb = new StringBuilder();// 字符串拼接void backTrace(String digits, String[] numString,int index){if(index == digits.length()){res.add(sb.toString());return;}//當前 數字對應的字符串String str = numString[digits.charAt(index) - '0'];for(int i = 0;i<str.length();i++){sb.append(str.charAt(i));backTrace(digits,numString,index+1);sb.deleteCharAt(sb.length() - 1);}}
}

思路

這道題和回溯1出現的題有區別,但是思路相似,這道題可以出現重復的元素。所以遞歸下一層start參數不用+1
39.組合總和
鏈接: link

class Solution {List<List<Integer>> res = new ArrayList();List<Integer> path = new ArrayList();public List<List<Integer>> combinationSum(int[] candidates, int target) {backTrace(candidates,target,0,0);return res;}void backTrace(int[] candidates,int target,int sum, int start){if(sum == target){res.add(new ArrayList(path));return;}for(int i = start;i < candidates.length;i++){if (sum > target) {continue;}sum += candidates[i];path.add(candidates[i]);backTrace(candidates,target,sum,i);sum -= candidates[i];path.remove(path.size() - 1);}}
}

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

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

相關文章

科普:“Docker Desktop”和“Docker”以及“WSL”

“Docker Desktop”和“Docker”這兩個概念既有緊密聯系&#xff0c;又存在一定區別&#xff1a; 一、聯系 核心功能同源&#xff1a;Docker Desktop 本質上是基于 Docker 核心技術構建的。Docker 是一個用于開發、部署和運行應用程序的開源平臺&#xff0c;它利用容器化技術…

Flutter 網絡請求與數據處理:從基礎到單例封裝

Flutter 網絡請求與數據處理&#xff1a;從基礎到單例封裝 在 Flutter 開發中&#xff0c;網絡請求是一個非常常見的需求&#xff0c;比如獲取 API 數據、上傳文件、處理分頁加載等。為了高效地處理網絡請求和數據管理&#xff0c;我們需要選擇合適的工具并進行合理的封裝。 …

虛擬表格實現全解析

在數據展示越來越復雜的今天&#xff0c;大量數據的渲染就像是“滿漢全席”——如果把所有菜肴一次性擺上桌&#xff0c;既浪費資源也讓人眼花繚亂。幸運的是&#xff0c;我們有兩種選擇&#xff1a; 自己動手&#xff1a;通過二次封裝 Element Plus 的表格組件&#xff0c;實…

QT 讀寫鎖

一、概述 1、讀寫鎖是一種線程同步機制&#xff0c;用于解決多線程環境下的讀寫競爭問題。 2、讀寫鎖允許多個線程同時獲取讀鎖&#xff08;共享訪問&#xff09;&#xff0c;但只允許一個線程獲取寫鎖&#xff08;獨占訪問&#xff09;。 3、這種機制可以提高并發性能&…

2025 vue3面試題匯總,通俗易懂

一、基礎概念與核心特性 1. Vue3 相比 Vue2 的改進&#xff08;通俗版&#xff09; 問題&#xff1a;Vue3 比 Vue2 好在哪&#xff1f; 答案&#xff1a; 更快&#xff1a; Proxy 代理&#xff1a;Vue2 的響應式像“逐個監聽保險箱”&#xff08;每個屬性單獨監聽&#xff0…

第5章:在LangChain中如何使用AI Services

這篇文章詳細介紹了 LangChain4j 中的 AI Services 概念&#xff0c;展示了如何通過高層次的抽象來簡化與大語言模型&#xff08;LLM&#xff09;的交互。AI Services 的核心思想是隱藏底層復雜性&#xff0c;讓開發者專注于業務邏輯&#xff0c;同時支持聊天記憶、工具調用和 …

二叉樹(數據結構)

二叉樹 二叉樹也是用過遞歸定義的結構 先序遍歷又稱前序遍歷 ?? ?? 按照先序遍歷的方法去手算處理這個二叉樹 ?? 先A B C 再 A B D E C&#xff08;也就是把B換成BDE再放進去&#xff09; 再 A B D E C F 看這個插入的方法要掌握像二叉樹這樣向一個…

機器學習筆記——常用損失函數

大家好&#xff0c;這里是好評筆記&#xff0c;公主號&#xff1a;Goodnote&#xff0c;專欄文章私信限時Free。本筆記介紹機器學習中常見的損失函數和代價函數&#xff0c;各函數的使用場景。 熱門專欄 機器學習 機器學習筆記合集 深度學習 深度學習筆記合集 文章目錄 熱門…

Wireshark使用介紹

文章目錄 Wireshark介紹Wireshark使用工作模式介紹1. 混雜模式&#xff08;Promiscuous Mode&#xff09;2. 普通模式&#xff08;Normal Mode&#xff09;3. 監視模式&#xff08;Monitor Mode&#xff09; 界面分區捕獲過濾器語法基本語法邏輯運算符高級語法使用示例捕獲過濾…

#滲透測試#批量漏洞挖掘#暢捷通T+SQL注入漏洞

免責聲明 本教程僅為合法的教學目的而準備,嚴禁用于任何形式的違法犯罪活動及其他商業行為,在使用本教程前,您應確保該行為符合當地的法律法規,繼續閱讀即表示您需自行承擔所有操作的后果,如有異議,請立即停止本文章讀。 目錄 一、漏洞全景解析 1. 高危漏洞案例庫 2.…

【小游戲】C++控制臺版本俄羅斯輪盤賭

制作團隊&#xff1a;洛谷813622&#xff08;Igallta&#xff09; 989571&#xff08;_ayaka_&#xff09; Mod&#xff1a;_ayaka_ 雙人模式&#xff1a;Igallta 公告&#xff1a; 原先的9.8改名為 Alpha 1.0&#xff0c;以后每次更新都增加 0.1。 Alpha 1.11 改為 Beta 1…

nvm安裝、管理node多版本以及配置環境變量【保姆級教程】

引言 不同的項目運行時可能需要不同的node版本才可以運行&#xff0c;由于來回進行卸載不同版本的node比較麻煩&#xff1b;所以需要使用node工程多版本管理。 本人在配置時&#xff0c;通過網絡搜索教程&#xff0c;由于文章時間過老&#xff0c;或者文章的互相拷貝導致配置時…

框架--Mybatis3

一.特殊符號處理 < < > > " &quot; &apos; & &amp; 除了可以使用上述轉義字符外&#xff0c;還可以使<![CDATA[ ]]>用來包裹特殊字符。 二.mybatis 一級緩存二級緩存 1.為什么緩存 緩存&#xff1a;數據緩存&#xf…

純新手教程:用llama.cpp本地部署DeepSeek蒸餾模型

0. 前言 llama.cpp是一個基于純C/C實現的高性能大語言模型推理引擎&#xff0c;專為優化本地及云端部署而設計。其核心目標在于通過底層硬件加速和量化技術&#xff0c;實現在多樣化硬件平臺上的高效推理&#xff0c;同時保持低資源占用與易用性。 最近DeepSeek太火了&#x…

Netty入門詳解

引言 Netty 是一個基于 Java 的高性能、異步事件驅動的網絡應用框架&#xff0c;用于快速開發可維護的高性能網絡服務器和客戶端。它提供了一組豐富的 API&#xff0c;使得開發人員能夠輕松地處理各種網絡協議&#xff0c;如 TCP、UDP 等&#xff0c;并且支持多種編解碼方式&a…

物聯網簡介集合

物聯網&#xff08;IoT&#xff09;指的是物理設備&#xff08;如電器和車輛&#xff09;之間的互聯互通。這些設備嵌入了軟件、傳感器和連接功能&#xff0c;使其能夠相互連接并交換數據。這項技術實現了從龐大的設備網絡中收集和共享數據&#xff0c;為打造更高效、自動化的系…

【分布式理論11】分布式協同之分布式事務(一個應用操作多個資源):從剛性事務到柔性事務的演進

文章目錄 一. 什么是分布式事務&#xff1f;二. 分布式事務的挑戰三. 事務的ACID特性四. CAP理論與BASE理論1. CAP理論1.1. 三大特性1.2. 三者不能兼得 2. BASE理論 五. 分布式事務解決方案1. 兩階段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…

【Quest開發】全身跟蹤

軟件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最終效果&#xff1a;能像meta的操作室沉浸場景一樣根據頭盔移動來推斷用戶姿勢&#xff0c;實現走路、蹲下、手勢匹配等功能 需要借助UnityMovement這個包 GitHub …

AI全棧開發_人工智能AI大模型 Prompt提示詞工程詳解(全方位介紹及運用)

AI引領的第四次工業革命正席卷而來&#xff0c;如何精準把握這一歷史性的機遇&#xff0c;將成為我們這一代人不容忽視且需深入思考與積極行動的重要課題。未來幾年AI將會像計算機一樣快速普及&#xff0c;面對這一歷史性的第一波紅利&#xff0c;你是否已準備好把握機遇&#…

小米平板怎么和電腦共享屏幕

最近嘗試使用小米平板和電腦屏幕分屏互聯 發現是需要做特殊處理的&#xff0c;需要下載一款電腦安裝包&#xff1a;小米妙享 關于這個安裝包&#xff0c;想吐槽的是&#xff1a; 沒有找到官網渠道&#xff0c;是通過其他網絡方式查到下載的 不附錄鏈接&#xff0c;原因是因為地…