劍指Offer 38 字串的排列

2022-08-11 07:33:14 字數 634 閱讀 3513

題目描述

輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。

(ps:字串中可能有重複元素)

思路每次遍歷一遍整個陣列,選擇乙個還沒有被排列的字母。由於給定字串中可能含有重複字母,應當用set來儲存排列序列,避免重複。

s為給定字串,used陣列記錄使用過的字母,cur記錄當前排列的序列,res為最終返回的集合(set):

遞推工作:

遍歷每乙個字母,如果used[i]被標記過,跳過,否則將其加入cur,並在used陣列中標記。

進入下一層遞迴

從cur中刪除剛才加入的字母,抹除used標記,返回上一層遞迴。

**:

/*

* * @param s

* @return */

var permutation = function

(s)

for(let i = 0; i < len; i++)

}};

易錯:將cur陣列合成字串時不能用tostring(),否則得到的字串含有「,」

set新增元素方法為add

題目要求最終返回string陣列,return時要用array.from將set轉換為陣列

劍指Offer 38 字串的排列

輸入乙個字串,列印出該字串中字元的所有排列。例 輸入 abc 輸出 abc acb bac cab cba 長度為n的字串的排列若是集合s,其中一種排列的字串為 s2,sn s2 sn 再插入sn 1s sn 1 則有對於乙個字串有n 1個插入位置。因此,解題思路就是每次遞迴加入乙個字元,直到字串全...

劍指 Offer 38 字串的排列

輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。示例 輸入 s abc 輸出 abc acb bac bca cab cba class solution boolean visited new boolean s.length dfs s,vis...

劍指 Offer 38 字串的排列

輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。示例 輸入 s abc 輸出 abc acb bac bca cab cba 限制 1 s 的長度 8 通過次數30,289提交次數55,865 思路 回溯法。這道題應該這樣來理解,對於每乙個位置,在...