劍指 Offer 38 字串的排列(回溯)

2021-10-20 22:00:18 字數 643 閱讀 6109

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

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

示例:輸入:s = 「abc」

輸出:[「abc」,「acb」,「bac」,「bca」,「cab」,「cba」]

分析:做排列問題需要注意給的字串或陣列是否允許包含重複元素,本題是允許包含重複元素的,區別於力扣的46題,在這裡通過乙個used陣列來標記哪些元素使用過,避免乙個元素使用多次(剪枝),再得到方案時在用unordered_map的自動去重機制過濾掉重複的組合(如給定s = 「aab」, 從第乙個a遞迴下去會有aab, 從第二個a遞迴下去也有aab,如果題目不包含重複元素,則不會出現這種問題)

ps:unordered_map的實現為雜湊表,速度優於用紅黑樹實現的map。

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