字串的排列組合

2021-08-09 10:12:34 字數 1561 閱讀 3349

求字串所有組合

若不考慮字串中有重複字元(即假設字串中無重複字元)

描述:輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入」abc」,它的組合有a、b、c、ab、ac、bc、abc。

方法一:假設我們想在長度為n的字串中求m個字元的組合。我們先從頭掃瞄字串的第乙個字元。針對第乙個字元,我們有兩種選擇:一是把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元;而是不把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選擇m個字元 .

//遞迴演算法

void combination(char* str, int number, vector

& result)

cout

} result.push_back(*str);

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

result.pop_back();

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

} int main()

方法二:假設給定一字串「abc」,則其所有組合方式為: a, b, ab, c, ac, bc, abc共七種(2^n - 1)種組合方式,可以利用位操作來簡化題目,即給所有輸出方式進行編號(1 ~ 2^n-1),利用與操作判斷對應字串位置是否為1,是即輸出

0 0 1 –> a

0 1 0 –> b

0 1 1 –> ab

1 0 0 –> c

1 0 1 –> ac

1 1 0 –> bc

1 1 1 –> abc

//非遞迴演算法

#include

#include

using

namespace

std;

void combination(string s)

}int main()

求字串全排列

題目描述

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

輸入描述:

輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

**:

#include

#include

#include

using

namespace

std;

void helper(string str, vector

&res, int begin)

for (int i = begin; i < str.size(); i++)

}vector

permutation(string str)

int main()

return

0;}

字串排列組合

題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。題目分析 考慮把這個複雜的問題分解成為小的問題。整個字串的排列,可以看成兩個部分 首先,求所有可能出現在第乙個位置的字元 然...

字串排列組合

1 字串的組合 子串行 題目 輸入乙個字串,輸出該字串中字元的所有組合。例子 輸入 abc,它的組合有 a b c ab ac bc abc 分析 我們可以將字串中的每個字元看成二叉樹的乙個節點,根節點為空,每個節點都會有兩種選擇 要 和 不要 兩種選擇 那麼我們就可以利用遞迴實現。public c...

字串的排列 組合

遞迴方法 1 全排列 面試題28 字串的排列 從集合依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理 n個數的全排列,一共有n!種情況.n個位置,第乙個位置有n種,當第乙個位置固定下來之後,第二個位置有n 1種情況.全排列的過程 選擇第乙個字元 獲得第乙個字元固定下...