开始抽空做一些算法题,留下记录作为菜鸟的成长见证吧。
这道题来自于Cracking the Coding Interview, 要求打印n对括号的所有可能匹配。
我采用递归来做,这样编写比较方便而且容易弄懂,但用迭代应该会效率快不少而且递归一定能转换成迭代吧,以后有空研究下
这道题来自于Cracking the Coding Interview, 要求打印n对括号的所有可能匹配。
我采用递归来做,这样编写比较方便而且容易弄懂,但用迭代应该会效率快不少而且递归一定能转换成迭代吧,以后有空研究下
代码如下:
#include "stdafx.h"
#include <cstring>
#include <iostream>
#include <time.h>
using namespace std;
char *ca;
void JudgeandDisplay(int currentcount,size_t totalsize,size_t pos)
{
if(pos==totalsize-2)
{
ca[pos+1]=')';
cout<<ca<<endl;
}
else
{
if(currentcount>=0&&tcount<totalsize-pos-1)
{
ca[pos+1] = '(';
JudgeandDisplay(currentcount+1,totalsize,pos+1);
}
if(currentcount>0&&tcount<=totalsize-pos-1)
{
ca[pos+1] = ')';
JudgeandDisplay(currentcount-1,totalsize,pos+1);
}
return;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cin>>n;
size_t totalsize=2*n;
time_t timebegin=time(NULL);
ca = new char[totalsize];
ca[0]='(';
JudgeandDisplay(1,totalsize,0);
delete[] ca;
cout<<"time used: "<<time(NULL)-timebegin<<" seconds"<<endl;
return 0;
}