輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串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 個元素,按照一定的...