字串排列與組合

2021-09-07 10:18:28 字數 852 閱讀 4652

一、字串的排列

給定乙個字串,如何求出字串的所有排列。

解題思路:字串的排列可以拆分成,第乙個字元和後面的字元進行組合而成,只需要變換第乙個字元,然後遞迴求後面的字元的排列即可,等到後面的字元為空的時候就得到一種字元的排列,下面是**實現:

// str 要排列的字串

// pbegin 待排列的字串的起始位置,遞迴用

void permutation(char *str, char *pbegin) }}

// 外部函式

void permutation(char *str)

二、字串的組合

如何求字串的所有組合,組合和排列不同,例如:"abc"的組合有"a"、「b」、「c」、「ab」、 「ac」、「bc」和「abc」。

解題思路:對於乙個長度為n的字元,它的組合長度有1位、2位、3位...n位,可以用迴圈分別求1-n位的組合,對於m位的組合可以拆分成取第一位,然後從後面的n-1位取m-1位組成乙個組合,或者不取第一位,然後從後面的n-1位取m位組成乙個組合,形成乙個遞迴演算法,**如下:

// 遞迴求inum位的所有組合

// pstr 要求組合的字串

// inum 組合的位數

// result 儲存組合

void combination(char *pstr, int inum, std::vector&result)

printf("\n");

} else }

// 外部函式,分別求1-n位的所有組合

void combination(char * str)

}

字串的排列與組合

求字串的排列可以把字串看成兩部分 第一部分為它的第乙個字元,第二部分是後面的所有字元。求字串的全排列的時候,可以用兩步完成 首先求所有可能出現在第乙個位置的字元,即把第乙個字元與後面的所有字元交換。第二步固定第乙個字元,求後面所有字元的排列。從中可以看出是典型的遞迴思路。字串的全排列 public ...

字串的排列與組合

字串的全排列 題目 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。分析 對於這個問題可以把字串分成兩個部分,一部分是字串的第乙個字元,另一部分是剩餘部分。即就是兩個步驟,1 求後面...

字串的全排列與組合

一 字串的排列 問題描述 給出乙個字串,請設計乙個函式輸出所有可能的排列,如abc,可能的排列順序有abc acb bac bca cba cab 問題分析 要對長度為n的序列進行排序,可以轉化為固定第乙個的值,再對剩餘的n 1個進行排序的問題,可以用遞迴實現。由於第乙個的值可以是任何乙個,可用第乙...