面試題 劍指Offer 28 字串的全排列

2021-07-29 01:44:20 字數 848 閱讀 1983

昨天做了一套cvte的面試題,最後乙個題目就是字串的全排列。做過劍指offer的童鞋一眼就可以看出這是劍指offer-28題

原題目,一點都沒變

把字串看成兩個部分,第乙個部分為第乙個字元,剩下的是後面的字元

首先將所有可能出現在第乙個位置的字元,將這些字元在每次迴圈的時候和第乙個字元交換、

先固定乙個字元,求後面字元的排列

然後將後面的字元按照前面的方法分成兩部分,遞迴

//面試題28:字串的全排列

//pstr表示要列印的字串,pbegin表示從該位置開始交換字元

void _per(char* pstr, size_t start, size_t end)

//注意,這裡pch不能初始為pbegin+1

for (size_t index = start; index != end; ++index) }

void per(char* pstr)

void testper()

1、cout<

2、原書中用的都是指標,原書中交換是手動交換的,而我這裡用下標來表示,用偏移加解引用比較方便點,不易出錯

3、std::swap交換要注意,不能寫成交換兩個指標了

用stl提供的演算法

sort和next_permutation可以快速的求出全排列

#includevoid per(char *str)

}void testper()

劍指Offer28 字串排列問題

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出字元a b c所能排列出來 的所有字串abc bac bca cab cba。求整個字串的全排列,可以看成兩步 第一步 首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換 第二步 固定第乙個字元,求後面所有...

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

題目描述 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c 所能排列出來的所有字串abc,acb,bac bca,cab 和cba 題目分析 可以分成兩步。第一步求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。第二步固定第乙個字元,求後面...

《劍指Offer》面試題28 字串的排列

劍指offer 面試題28 字串的排列 字串的全排列和組合演算法 遞迴輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出字元a b c所排列出來的所有字串abc acb bac bca cab和cba。輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入abc,它的組合...