您的位置:首页 > 其它

用递归实现从M个不同字符中选取N个字符的所有组合

2010-11-02 23:32 357 查看
  以前做过类似字符串的题目,当时觉得字符串也能用递归来做非常神奇,后来思考了下,觉得只要抓住字符串是由一个个字符组成的,从第一个字符到最后一个字符每一个都可以作为一次递归,把index作为参数传进去就行,以这种思想为指导才把此题解了出来。 

  对于每个字符只有两种情况,设当前字符串指针为x, 目标字符串指针为y:
  GetString(x,y)= GetString(x+1,y), 不取当前字符
  GetString(x,y) = GetString(x+1,y+1), 取当前字符

  

//////////////////////////////////////////////////////////////////////////
//    递归实现M个字符选N个字符
//
//    param:
//    origin: original string
//    oirIndex: index point to original string
//    M: length of original string
//    des: destination string
//  desIndex: index point to des string
//    N: length of des string
//////////////////////////////////////////////////////////////////////////
void GetString(char* origin, int oriIndex, int M, char* des, int desIndex, int N)
{
if(M < N)
return;

//output
if(strlen(des) == N)
{
cout<<des<<endl;
return;
}
//reach the end of origin or des
if(oriIndex == M)
return;
if(desIndex == N)
{
return;
}

//pick oriIndex
des[desIndex]= origin[oriIndex];
GetString(origin,++oriIndex,M,des,++desIndex,N);
//not pick
des[--desIndex] = '\0';
--oriIndex;
GetString(origin,++oriIndex,M,des,desIndex,N);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐