可視化圖解算法57:字符串的排列

牛客網 面試筆試 TOP101 ? ?| ? ? LeetCode 3437. 全排列III

1. 題目

描述

輸入一個長度為 n 字符串,打印出該字符串中字符的所有排列,你可以以任意順序返回這個字符串數組。

例如輸入字符串ABC,則輸出由字符A,B,C所能排列出來的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。

數據范圍:n < 10 要求:空間復雜度 O(n!),時間復雜度 O(n!)

輸入描述:

輸入一個字符串,長度不超過10,字符只包括大小寫字母。

示例1

輸入:

"ab"

返回值:

["ab","ba"]

說明:

返回["ba","ab"]也是正確的 ? ? ? ? ?

示例2

輸入:

"aab"

返回值:

["aab","aba","baa"]

示例3

輸入:

"abc"

返回值:

["abc","acb","bac","bca","cab","cba"]

示例4

輸入:

" "

返回值:

[ ]

2. 解題思路

字符串的排列可以使用回溯算法,要注意字符串中有可能包含相同的字符。具體思路如下:

遍歷每一個元素,以該元素作為開頭的數字數列。首先選取該數字,并標記該數字已經使用過;再遞歸選擇其他數字;撤銷該數字,讓其他數字作為開頭。縮小數字區間:該元素已經使用過;當前元素與前一個元素一樣,且前一個已經使用過。

如果文字描述的不太清楚,你可以參考視頻的詳細講解。

  • Python版本:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1374917

  • Java版本:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1368181

  • Golang版本:LeetCode數據結構筆試面試算法-Go語言版_嗶哩嗶哩_bilibiliLeetCode數據結構筆試面試算法-Go語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1365124

3. 編碼實現

核心代碼如下:

/*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可*** @param str string字符串* @return string字符串一維數組*/
func Permutation(str string) []string {// write code hereresult = make([]string, 0)path = make([]string, 0)//字符串為數組arr := strings.Split(str, "")sort.Strings(arr)mark = make([]bool, len(arr))//回溯獲取結果backtracking(arr)return result
}var (result []string //結果集path   []string //路徑mark   []bool
)func backtracking(arr []string) {// 2. 遞歸終止條件:路徑數組滿了(找到一種路徑),加入到輸出列表if len(path) == len(arr) {//2.1 存放結果tmp := strings.Join(path, "") //切片轉stringresult = append(result, tmp)//2.2 返回return}//1.選擇:在本層集合中遍歷元素for i := 0; i < len(arr); i++ {//1.4剪枝:// 1.4.1 元素已經使用過則不需要再加入了if mark[i] {continue}// 1.4.2 當前的元素charStr[i]與同一層的前一個元素charStr[i-1]相同且charStr[i-1]已經用過了if (i >= 1) && (arr[i] == arr[i-1] && mark[i-1]) {continue}//1.1 處理節點 (選取字符)path = append(path, arr[i]) //加入路徑數組mark[i] = true              //標記為使用過// 1.2 遞歸(選擇其他字符)backtracking(arr)//1.3 回溯,撤銷選擇path = path[:len(path)-1]mark[i] = false}
}

具體完整代碼你可以參考下面視頻的詳細講解。

  • Python版本:嗶哩嗶哩_bilibili

  • Java版本:嗶哩嗶哩_bilibili

  • Golang版本:嗶哩嗶哩_bilibili

4.小結

字符串的排列可以使用回溯算法,要注意字符串中有可能包含相同的字符。遍歷每一個元素,以該元素作為開頭的數字數列。首先選取該數字,并標記該數字已經使用過;再遞歸選擇其他數字;撤銷該數字,讓其他數字作為開頭。


《數據結構與算法》深度精講課程正式上線啦!7 大核心算法模塊全解析:

? ? ? 鏈表

? ? ? 二叉樹

? ? ? 二分查找、排序

? ? ? 堆、棧、隊列

? ? ? 回溯算法

? ? ? 哈希算法

? ? ? 動態規劃

無論你是備戰筆試面試、提升代碼效率,還是突破技術瓶頸,這套課程都將為你構建扎實的算法思維底座。🔥立即加入學習打卡,與千名開發者共同進階!

  • Python編碼實現:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ss897667807

  • Java編碼實現:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ss161443488

  • Golang編碼實現:LeetCode數據結構筆試面試算法-Go語言版_嗶哩嗶哩_bilibiliLeetCode數據結構筆試面試算法-Go語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ss63997

對于數據結構與算法,我們總結了一套【可視化+圖解】方法,依據此方法來解決相關問題,算法變得易于理解,寫出來的代碼可讀性高也不容易出錯。具體也可以參考視頻詳細講解。

今日佳句:黃沙百戰穿金甲,不破樓蘭終不還。

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

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

相關文章

Go語言常量

目錄 前言&#xff1a; 1、const聲明常量 2、一次聲明多個常量 前言&#xff1a; 這次來學習一下Go語言中的常量&#xff0c;在上一期中我學習了Go語言中的變量&#xff0c;如果有興趣可以看看我往期的文章&#xff0c;或者點擊Go語言聲明變量。 相對于變量&#xff0c;常量的…

SelectDB:新一代實時數倉的核心引擎與應用實戰

> 數據價值隨時間流逝而衰減,而SelectDB讓企業在數據洪流中抓住了每一秒的價值 在數字化轉型浪潮中,企業數據呈現**爆發式增長**,傳統數據倉庫在實時性、查詢效率和成本控制方面遭遇嚴峻挑戰。中通快遞的案例極具代表性——其原有架構處理分鐘級查詢時,資源消耗巨大,…

華為OD機考2025C卷 - 分配土地 (Java Python JS C++ C )

題目描述 從前有個村莊,村民們喜歡在各種田地上插上小旗子,旗子上標識了各種不同的數字。 某天集體村民決定將覆蓋相同數字的最小矩陣形的土地分配給村里做出巨大貢獻的村民,請問此次分配土地,做出貢獻的村民種最大會分配多大面積? 輸入描述 第一行輸入 m 和 n, m 代…

NetBSD notes

文章目錄the introduce to NetBSDreferencesthe introduce to NetBSD NetBSD is a Unix-like Open Source operating system, which can run in many hardware platforms , and is advantageous to production and research.> boot hd0a:netbsd is used for booting NetBSD…

【數據遷移】Windows11 下將 Ubuntu 從 C 盤遷移到 D 盤

由于個人情況存在差異&#xff0c;請在參考本文進行數據遷移前后多方比對確認&#xff0c;確保無誤后再謹慎操作&#xff01; 【2025-08-03補充】運行過程中發現實際上 docker 的遷移工作可能更為復雜&#xff01;強烈不推薦本文的 docker 遷移方法&#xff08;本文已翻車&…

Java面試(常考基礎知識點)總結

1. 面向對象三大特性相關 1.1 三大特性 封裝&#xff1a;對抽象的事物抽象化成一個對象&#xff0c;并對其對象的屬性私有化&#xff0c;同時提供一些能被外界訪問屬性的方法&#xff1b;繼承&#xff1a;子類擴展新的數據域或功能&#xff0c;并復用父類的屬性與功能&#x…

[Shell編程] 零基礎入門 Shell 編程:從概念到第一個腳本

目錄 一、什么是 Shell&#xff1f;—— 連接用戶與系統的 "橋梁" 二、常見的 Shell 類型 —— 不同系統的 "操作面板" 三、Shell 能做什么&#xff1f;—— 不止于 "輸入命令" 1??命令行操作&#xff1a;這是最基礎的功能。通過ls&#x…

【數據結構】排序(sort) -- 插入排序

目錄 一、插入排序 二、直接插入排序&#xff08;straight insertion sort&#xff09; 1. 思路介紹 2. 代碼實現 3. 特性總結 三、希爾排序&#xff08;Shell sort&#xff09; 1. 思路介紹 2. 代碼實現 3. 特性總結 四、總結 一、插入排序 常見的排序算法有&…

水面垃圾清掃船cad【6張】三維圖+設計說明書

海洋吸塵器結構設計 摘 要 近年來&#xff0c;隨著經濟的快速發展&#xff0c;海洋產業及海上活動的增加&#xff0c;導致海洋漂浮垃圾越來越多&#xff0c;對沿岸的居民和海洋的生物的生命安全造成了很大的威脅&#xff0c;嚴重破壞海洋生態平衡。針對海洋垃圾污染這一主要問…

03-List列表數據類型

1.特點&#xff1a; 原屬是字符串類型 列表頭尾增刪塊&#xff0c;中間慢&#xff0c;增刪元素是常態 元素可重復 最多包含2^32-1個元素 索引通python列表2.常用命令 ------增------ 1.從列表頭部壓入數據LPUSH key value1 value22.從列表尾部壓入數據RPUSH key value1 value23…

防火墻認證用戶部署

文章目錄1、配置vlan2、防火墻配置&#xff08;1&#xff09;配置安全區域&#xff08;2&#xff09;接口加入安全區域(3)fw配置DHCP(4)地址組&#xff08;5&#xff09;管理員(6)用戶認證1、配置vlan vlan batch 10 20 [Huawei-GigabitEthernet0/0/2]port link-type access …

Vue.js之監聽器

watch偵聽器&#xff1a;作用:監視數據變化&#xff0c;執行一些 業務邏輯 或 異步操作。 語法:簡單寫法→簡單類型數據&#xff0c;直接監視完整寫法 → 添加額外配置項 (1)deep:true 對復雜類型深度監視(2)immediate:true 初始化立刻執行一次handler方法//1.簡單寫法 data: {…

25電賽e題雜亂環境穩定識別矩形框(附源碼)

? 識別并跟蹤矩形目標 識別視頻中符合矩形輪廓的目標區域&#xff0c;并標記中心點位置。 實現思路 **圖像預處理&#xff1a;灰度 二值化**閉運算消除孔洞二值化處理查找并篩選矩形輪廓解算中心點目標篩選結果繪制 環境 使用 OpenCV 和 python&#xff1a; 圖像預處理…

【前端安全】聊聊 HTML 閉合優先級和瀏覽器解析順序

【前端安全】聊聊瀏覽器解析順序和 HTML 閉合優先級 最近在研究 XSS 的時候&#xff0c;發現一個特別容易被忽略的問題 —— 瀏覽器到底是怎么解析 HTML 的&#xff1f;為什么有些 payload 成功了&#xff0c;有些卻怎么試都不行&#xff1f;其實這跟標簽的閉合優先級還有解析順…

PHP-分支語句、while循環、for循環

分支語句 無論在何種編程語言中&#xff0c;流程控制都是很重要的內容。由于 PHP 的大部分語法都繼承了C語言的特點&#xff0c; 因此在流程控制方面&#xff0c;PHP 有著和C語言類似的流程控制。 if else 語句是流程控制中根據條件判斷執行的一種。該語句執行時先對條件進行判…

并發編程常用工具類(下):CyclicBarrier 與 Phaser 的協同應用

在并發編程中&#xff0c;除了CountDownLatch和Semaphore&#xff0c;CyclicBarrier和Phaser也是實現多線程協作的重要工具。它們在處理多階段任務同步、動態調整參與線程等場景中展現出獨特價值。本文作為并發工具類系列的第二篇&#xff0c;將深入解析CyclicBarrier和Phaser的…

機器人焊接節氣裝置

在摩托車制造過程中&#xff0c;精密部件的焊接質量直接影響整車的安全性和操控性能。以發動機缸體焊接為例&#xff0c;傳統手工焊接容易出現焊縫不均勻的問題&#xff0c;而采用六軸弧焊機器人后&#xff0c;焊接精度能控制在0.1毫米以內。日本川崎重工的生產數據顯示&#x…

使用yolo11訓練食物浪費檢測數據集VOC+YOLO格式6734張32類別步驟和流程

【數據集介紹】數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件)圖片數量(jpg文件個數)&#xff1a;6734標注數量(xml文件個數)&#xff1a;6734標注數量(txt文件個數)&#xff1…

掌握PowerPC架構與編程技巧:技術資料詳解

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;PowerPC是一種高性能的RISC架構&#xff0c;最初由IBM、Motorola和Apple聯合開發&#xff0c;被設計用于高端工作站和服務器&#xff0c;同時廣泛應用于嵌入式系統、航空電子設備、游戲主機和超級計算機等領域。…

VR 企業展廳:開啟數字化展示新時代

在當今數字化浪潮席卷各行各業的時代&#xff0c;企業的展示與宣傳方式也在不斷革新。VR&#xff08;虛擬現實&#xff09;技術的出現&#xff0c;為企業展廳帶來了全新的變革&#xff0c;使其從傳統的實體展示空間&#xff0c;轉變為具有無限可能的數字化虛擬空間。一、VR 企業…