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

2021-10-01 17:56:16 字數 1242 閱讀 6203

題目描述

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

輸入描述:

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

思路思路:遞迴法,問題轉換為先固定第乙個字元,求剩餘字元的排列;求剩餘字元排列時跟原問題一樣。

(1) 遍歷出所有可能出現在第乙個位置的字元(即:依次將第乙個字元同後面所有字元交換);

(2) 固定第乙個字元,求後面字元的排列(即:在第1步的遍歷過程中,插入遞迴進行實現)。

需要注意的幾點:

1.mypermutation函式引數型別為引用.真正的改變了實參array

(1) 先確定遞迴結束的條件,例如本題中可設begin == str.size() - 1;

(2) 形如 aba 或 aa 等特殊測試用例的情況,vector在進行push_back時是不考慮重複情況的,需要自行控制;

(3) 輸出的排列可能不是按字典順序排列的,可能導致無法完全通過測試用例,考慮輸出前排序,或者遞迴之後取消復位操作。

**

class

solution

private

:void

mypermutation

(string str, vector

& array,

int pbegin)

else}}

};

1、 strlen ----計算字串的長度,不包括 『\0』; sizeof -----計算字串長度,包括 『\0』.

2、判斷字串為空的問題:

3、sort函式的用法:

sort(start, end,排序方法)

注釋:(1)第乙個是要排序的陣列的起始位址。

(2)第二個是結束的位址( 最後一位要排序的位址的下一位址)

(3)第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,此時預設的排序方法是從小到大排序。

4、find函式用法:

find( inputiterator first, inputiterator last, const t& val)

注釋:(1)、first 輸入查詢序列的開始位置,注意:這個引數為迭代器;

(2)、last 輸入查詢序列的結束位置,注意: 這個引數為迭代器;

(3)、val 要查詢的值;

牛客劍指Offer面試題26 樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 解題思路 判斷樹 中有無與樹 的根節點相同的節點 如無相同節點,則樹 肯定不是樹 子結構 如樹 中有樹 的根節點,則遞迴的判斷其各自左右節點的值是否相同 注意 注意已知題幹的審題,如果給出的樹節點的資料...

劍指Offer Python語言 面試題38

面試題38 字串的排列 題目 輸入乙個字串,列印出該字串中字元的所有排列。例如,輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca和cba。coding utf 8 class solution def permutation self,ss write c...

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

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