《劍指offer》刷題系列 (七十)字串的排列

2021-10-08 13:48:05 字數 1167 閱讀 8279

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

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

示例:輸入:s = 「abc」

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

求整個字串的排列,可以看成兩步:

第一步是求所有可能出現在第乙個位置的字元,即把第乙個字元與後面所有的字元交換;

第二步是固定第乙個字元,求後面所有字元的排列。

(第二步中求後面字元的排列依然是使用這兩步的方法,也就是遞迴實現。)

時間複雜度 o(n!) : n 為字串 s 的長度;時間複雜度和字串排列的方案數成線性關係,方案數為 n×(n−1)×(n−2)…×2×1,因此複雜度為 o(n!)。

空間複雜度 o(n2): 全排列的遞迴深度為 n ,系統累計使用棧空間大小為 o(n);遞迴中輔助 set 累計儲存的字元數量最多為 n+(n−1)+…+2+1=(n+1)n/2,即占用 o(n2)的額外空間。

劍指Offer系列刷題筆記彙總

本系列文章為 劍指offer 刷題筆記。刷題平台 牛客網 刷題刷的比較慢,花費了兩個多月,終於將所有題目過了一遍,牛客網一共有66道題,這次刷題主要使用c 接下來會使用python重新過一遍,並對這些寫過的文章進行更新。同時,也會重新開始刷leetcode。github專案 分類二一 線性表 1 陣...

劍指Offer系列刷題筆記彙總

劍指offer 二 替換空格 劍指offer 二十七 字串的排列 劍指offer 三十四 第乙個只出現一次的字元 劍指offer 四十三 左旋轉字串 劍指offer 四十四 翻轉單詞順序序列 劍指offer 四十九 把字串轉換成整數 劍指offer 五十二 正規表示式匹配 劍指offer 五十三 表...

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...