《劍指offer》字串的排列

2021-07-15 05:56:53 字數 1525 閱讀 2431

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

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

所能排列出來的所有字串。結果請按字母順序輸出

class solution 

};

1、逐個字元插入,生成新的字串

2、去掉相同的字串

3、排序

對於步驟1、2:

例如:「abcc」逐個字元處理

vector vt

1)「a」進入vt

2)「b」跟vt中所有字串組成新的字串(「b」插入以前字串不同的位置),」a」出列表,「b」插入「a」的不同位置得到的新字串有:

「ab」,」ba」,都進入vt中()

3)對vt中的字串檢查是否有相同的字串(沒有)

4)「c」跟vt中所有字串組成新的字串:

「abc」,」acb」,」cab」;」bac」,」bca」,」cba」先後進入vt中。

5)對vt去重

6)「c」跟vt中所有字串組成新的字串:

「abcc」,」abcc」,」acbc」,」cabc」;

「acbc」,」accb」,」accb」,」cacb」;

「cabc」,」cacb」,」ccab」,」ccab」;

「bacc」,」bacc」,」bcac」,」cbac」;

「bcac」,」bcca」,」bcca」,」cbca」;

「cbac」,」cbca」,」ccba」,」ccba」;

進入vt中。

7)對vt去重、排序:

abcc

acbc

accb

bacc

bcac

bcca

cabc

cacb

cbac

cbca

ccab

ccba

#include

#include

#include

#include

using

namespace

std;

class solution

vt.pop_back();}/*

*去掉vector中相同的字串

*/vt.clear();

for(int j = 0; j < tempqu.size(); j++)

if(k >= vt.size()) vt.push_back(currstr);}}

vt = sortstr(vt);

return vt;}/*

*插入排序

*/vector

sortstr(vector

str)

str[j+1] = temp;

}return str;

}};

劍指Offer 字串排列

題目描述 輸入乙個字串,列印出該字串中字元的所有排列。解析 step 1 求所有可能出現第乙個位置的字元。把第乙個字元與後面的每個字元交換。step 2 固定第乙個字元,將後面的字元利用遞迴進行全排列。include include using namespace std void stringpe...

劍指offer 字串的排列

題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c 所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。解題思路 深度搜尋,在每層搜尋裡設定乙個a陣列對映所有字元,每個字元在這層迴圈中只能使用一次,避免重...

劍指offer 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。分析 經典問題。記住吧。class ...