程式設計思路:如果字串中有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 ...