今天別人問的一道題,強調用分治法實現 =。=
百度了一下格雷碼,然後寫了一下。
關於格雷碼大家看百度的吧,特別詳細,貼個圖:

代碼如下(header_file.h是我自己寫的一個頭文件,包括常見的vector iostream等):
#include"header_file.h"
using namespace std;
vector<string> gray_code(int n)
{
if(n==1)
{
vector<string> v;
v.push_back("0");
v.push_back("1");
return v;
}
else
{
vector<string> v;
vector<string> v1;
v1=gray_code(n-1);
for(int i=0;i<v1.size();i++)
{
v.push_back("0"+v1[i]);
}
for(int i=(v1.size()-1);i>-1;i--)
{
v.push_back("1"+v1[i]);
}
return v;
}
}
int main(int argc,char *argv[])
{
int n;
cout<<"input n:";
cin>>n;
vector<string> v;
v=gray_code(n);
for(int i=0;i<v.size();i++)
{
cout<<v[i]<<endl;
}
}
最後:過程是重要的,代碼只是你邏輯的體現 -。-