用遞迴實現從M個不同字元中選取N個字元的所有組合

2021-09-25 08:29:19 字數 1231 閱讀 4379

以前做過類似字串的題目,當時覺得字串也能用遞迴來做非常神奇,後來思考了下,覺得只要抓住字串是由乙個個字元組成的,從第乙個字元到最後乙個字元每乙個都可以作為一次遞迴,把index作為引數傳進去就行,以這種思想為指導才把此題解了出來。 

對於每個字元只有兩種情況,設當前字串指標為x, 目標字串指標為y:

getstring(x,y)= getstring(x+1,y), 不取當前字元

getstring(x,y) = getstring(x+1,y+1), 取當前字元

1//2

//遞迴實現m個字元選n個字元3//

4//param: 5//

origin: original string 6//

oirindex: index point to original string7//

m: length of original string8//

des: destination string 9//

desindex: index point to des string

10//

n: length of des string

11//

12void

getstring(

char

*origin,

intoriindex,

intm,

char

*des,

intdesindex,

intn)

1323

//reach the end of origin or des

24if

(oriindex

==m)

25return;26

if(desindex

==n)

2730

31//

pick oriindex

32des[desindex]

=origin[oriindex];

33getstring(origin,

++oriindex,m,des,

++desindex,n);

34//

not pick

35des[

--desindex] ='

\0';36

--oriindex;

37getstring(origin,

++oriindex,m,des,desindex,n);38}

遞迴實現 從n個數中選取m個數的所有組合

有n n 0 個數,從中選取m n m 0 個數,找出所有的組合情況 不分順序 這樣的組合共有 cm n n n 1 n m 1 m 乙個陣列 data 有 n 個元素,從中選取 m 個數的組合 arr,使用遞迴演算法實現是這樣乙個過程 1 選擇 data的第1個元素為arr的第乙個元素,即 arr...

組合問題 從M個字元取N個不同字元所有組合

如題,舉個例子,m字元為 abcde 取n 3的字元。解題思路如下 取a時,則在剩下的取2個字元,不取a,則在剩下的取3個字元,即有c a,2 c 3 取三個字元,又可以表示為從c b,1 c 2 如此迴圈,直到所需字元數量 n,則停止迴圈,返回結果。如下 public static void co...

遞迴實現n個不同字元的所有全排列

設str是含有n個不同字元的陣列例如含123,perm str,k,n 為str k str n 1 的所有字元全排序輸出函式。很明顯,perm str,k 1,n 處理的字元個數比perm str,k,n 處理的字元個數少乙個。假定perm str,k 1,n 可求,對於第k個位置可以任取k n ...