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