劍指offer(27)字串的排列

2022-03-10 09:53:29 字數 1012 閱讀 6794

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

輸入描述:輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

這題還算可以,關於全排列,有兩種解法,第一種就是遞迴全排列法,第二種就是回溯法。

遞迴全排列法:

就是劍指offer上的做法,也比較容易理解,不過挺少人答的也就是

把字串分為兩部分:第一部分為第乙個字元,第二部分為第乙個字元以後的字串。

然後接下來求後面那部分的全排列。

再將第乙個字元與後面的那部分字元逐個交換

回溯法

也就是利用樹去嘗試不同的可能性,不斷地去字串陣列裡面拿乙個字元出來拼接字串,當字串陣列被拿空時,就把結果新增進結果陣列裡,然後回溯上一層。(通過往陣列加回去字元以及拼接的字串減少乙個來回溯。)

回溯法:

//

回溯法function

permutation(str)

function

permutate(arr, pstr, res)

const isrepeated = new

set();

for (let i = 0; i < arr.length; i++)

} return

res;

}

遞迴全排列法:

//

遞迴全排列法

function

permutation2(str)

function

permutate2(arr, index, res)

for (let i = index; i < arr.length; i++)

return

res;

}

劍指offer 27 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。時間限制 1秒 空間限制 32768k 熱度指數 2992...

《劍指Offer》27 字串的排列

題目 27.字串的排列 知識點 字串 回溯演算法 題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。解題思路 主要是使用回溯演算法的思想,通過遞迴從後向前將字串分為固定部分和...

劍指offer 27 字串的排列 Python

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。全排列 從n個不同元素中任取m m n 個元素,按照一定的...