字串全排列和組合問題

2021-07-05 13:05:48 字數 1367 閱讀 9865

程式設計思路:

如果字串中有n個字元,那麼一共需要輸出2^n-1中組合假設我們想在長度為n的字串中求m個字元的組合。我們先從頭掃瞄字串的第乙個字元。

針對第乙個字元,我們有兩種選擇:第一是把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元;

第二是不把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選擇m個字元。這兩種選擇都很容易用遞迴實現。

**實現:

void combination(char *string)  

void combination(char *string ,int number , vector

&result)

if(*string == '\0')

return ;

result.push_back(*string);

combination(string + 1 , number - 1 , result);

result.pop_back();

combination(string + 1 , number , result);

}

測試用例:

程式設計思路:

求字串的排列,可以看成兩步:

首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面的所有字元交換,

第二步固定第乙個字元,求後面所有字元的排列。

接下來,我們仍然把後面的所有字元分成兩個部分:

後面字元的第乙個字元,以及這個字元之後的所有字元。然後把第乙個字元逐個和它後面的字元交換。

**實現:

void permutation(char* pstr,char* pbegin);

void permutation(char *pstr)

permutation(pstr,pstr);

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

else}}

測試用例:

求字串中字元全排列 和 組合

1 若不考慮字串中有重複字元 即假設字串中無重複字元 2 若考慮字串中有重複字元 即假設字串中有重複字元 2 若考慮字串中有重複字元 即假設字串中有重複字元 上述思路非常好,但是若存在重複字元,則就不正確了,比如對於上述程式,輸入 aabc 則輸出 就會出現重複的結果。我本來思考著如果在與 pbeg...

字串全排列問題

全排列問題 給定字串 abc,全排列為 abc,acb,bac,bca,cab,cba 遞迴實現 1 標記訪問狀態陣列 val,當前所儲存的字串物件 tmp,儲存結果陣列 res 2 思路 2.1 每次從 0 到 str.length 1,選擇未被訪問的字元加入到 tmp 中,標記當前字元為已訪問 ...

字串全排列問題

問題描述輸入乙個字串,列印出該字串中字元的所有排列 演算法思路通過遞迴的方法來實現。從字串中選出乙個字元作為排列的第乙個字元,然後對剩餘的字元進行全排列。如此遞迴處理。實現def premutation str length len str if length 1 return str array ...