遞迴求解思路:
1) 每個元素依次放到首位,然後對其餘元素遞迴
2) 當當前元素到達末尾的時候,輸出該序列
關鍵是:
每個元素交換完,之後要交換過來。每個元素依次放到首位,
for(inti=currentindex;i<=n;++i)
#include#include#define swap(x,y,t)((t)=(x),(x)=(y),(y)=(t))
int score=0;
void perm(int *list,int i,int n)
printf("\n");
score++;
}else
}}int main()
; perm(list,0,2);
printf("thetotal number is %d\n",score);
system("pause");
}
string 版本
#include using namespace std;
void permutation(string pstr, int k, int n)
{ if(k==n)
cout<
二,擴充套件
如果不是求字元的所有排列,而是求字元的所有組合,應該怎麼辦呢?(
p72)
思路:這裡不採用交換方式,而是採用刪減的方式。採用不同的剔除順序,並用
prex
保留刪減值,這樣將得到所有符合條件的序列
#include using namespacestd;
voidselect(string str, string prex)
{ string temp=str;
cout<
擴充套件二:
當輸入的字串中含有相同的字串時,相同的字元交換位置是不同的排列,但是同乙個組合。
舉個例子,如果輸入
aaa,那麼它的排列是6個
aaa,但對應的組合只有乙個。
100題 第五十三題 字串的全排列
遞迴求解思路 1 每個元素依次放到首位,然後對其餘元素遞迴 2 當當前元素到達末尾的時候,輸出該序列 關鍵是 每個元素交換完,之後要交換過來。每個元素依次放到首位,for int i currentindex i n i include include define swap x,y,t t x x...
劍指Offer第五十三題 表示數值的字串
請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。思路 這裡表示數字的字元有 0 9,e,e,規則 ps 這裡我測試過 128.可以輸出,1,1...
演算法題 字串的全排列
問題 編寫乙個函式,用它把字串中所有的字元的各種排列形式全部顯示出來,即用給定字元做全排列。如 比如給定字串 hat 函式輸出全排列 tha,aht,tah,ath,hta,hat.演算法如下 void dopermute char in,char out,int used,int length,i...