劍指Offer 38 字串的排列

2022-06-11 14:48:11 字數 785 閱讀 3438

輸入乙個字串,列印出該字串中字元的所有排列。

你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。

輸入:s = "aab"

輸出:["aab","aba","baa"]]

class solution 

private:

vectorres;

void recur(string& s, int pos)

}bool checkdup(string& s, int pos, int i)

};

經典的回溯題,使用swap函式遍歷同深度的所有可能情況,backtrace函式進入下乙個深度,最後再swap回來實現回溯功能。本題需要注意的是可能存在重複元素,所以需要在深度優先遍歷中剪枝,如下圖所示。

使用set等資料結構來進行剪枝會花費更多的記憶體,這裡採用for迴圈直接判斷是否需要剪枝。

class solution 

private:

string ans;

vectorvis;

vectorres;

void backtrace(string& s) }};

細節整理完回溯內容後補充。

劍指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 思路 回溯法。這道題應該這樣來理解,對於每乙個位置,在...