以前做過類似字串的題目,當時覺得字串也能用遞迴來做非常神奇,後來思考了下,覺得只要抓住字串是由乙個個字元組成的,從第乙個字元到最後乙個字元每乙個都可以作為一次遞迴,把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 ...