劍指offer面試題38 字串的排列

2021-10-03 21:54:07 字數 707 閱讀 7301

題目描述

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

思路:這道題使用的是動態規劃和遞迴的思想。對於輸入的乙個字串,可以把它分為兩個部分:首字母和剩下的部分。然後對剩下的部分進行遞迴處理,在遞迴的過程中,使用乙個棧記錄遞迴的路徑,對於傳入的非空字串,先將首字母入棧,然後遞迴剩下的部分, 然後該字母出棧。當到達遞迴終點:傳入的字串是個空串,那麼就將當前棧內儲存的路徑加入到結果集陣列裡面。

注意:這個方法需要注意遇到諸如』aa』這樣的串,只有一種排列。

**如下:

function

permutation

(str)

solve

(str, arr, stack)

for(

let i =

0; i < arr.length; i++

)for

(let i =

0; i < res.length; i++

) res =

for(

let i in obj)

return res

}function

solve

(str, arr, stack)

}else

}

劍指offer 面試題38 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。ps 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。其實就是對字串全排列,然後放到 treeset 中。放到tre...

劍指Offer 面試題38 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。思路 遞迴思路。迴圈固定第乙個位置字母,則後面的排序數等於其餘字元的排序。對其餘字元也一樣進行這樣的操作。最後使用set去重,並排序。...

《劍指offer》面試題38 字串的排列

思路 1.我們求整個字串的排列,可以看成兩步 首先求出所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。2.第二步固定第乙個字元,求後面所有字元的排列。這個時候我們仍把後面的所有字元分成兩部分 後面字元的第乙個字元,以及這個字元之後的所有字元。然後把第乙個字元逐一和它後面的字元交換...