leetcode 里面Gray code题的多种解法
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
class Solution1
{
public:
vector<int>grayCode(int n)
{
vector<int>result;
vector<int>temp;
if(n==0)
{
result.push_back(0);
return result;
}
if(n==1)
{
result.push_back(0);
result.push_back(1);
return result;
}
else
{
result=grayCode(n-1);
}
temp=result;
for(vector<int>::reverse_iterator iter=temp.rbegin();iter!=temp.rend();iter++)
result.push_back(*iter+pow(2,n-1));
/*reverse(temp.begin(),temp.end());
for(vector<int>::iterator iter=temp.begin();iter<temp.end();iter++)
result.push_back(*iter+pow(2,n-1));*/
//temp.erase(temp.begin(),temp.end());
return result;
}
};
class Solution2
{
public:
vector<int> grayCode(int n) {
vector<int> result;
const size_t size = 1 << n;
result.reserve(size);
for (size_t i = 0; i < size; ++i)
result.push_back(binary_to_gray(i));
return result;
}
private:
static unsigned int binary_to_gray(unsigned int n) {
return n ^ (n >> 1);
}
};
class Solution3
{
public:
vector<int> grayCode(int n) {
vector<int> result;
result.reserve(1<<n);
result.push_back(0);
for (int i = 0; i < n; i++) {
const int highest_bit = 1 << i;
for (int j = result.size() - 1; j >= 0; j--)
result.push_back(highest_bit | result[j]);
}
return result;
}
};
class Solution4
{
public:
vector<int>grayCode(int n)
{
vector<int>result;
int num;
result.push_back(0);
for(int i=0;i<n;i++)
{
num=1<<i;
for(int j=result.size()-1;j>=0;j--)
result.push_back(result[j]+num);
}
return result;
}
};
void main()
{
Solution1 solution;
vector<int>array;
array=solution.grayCode(5);
for(vector<int>::iterator iter=array.begin();iter!=array.end();iter++)
cout<<*iter<<' ';
cout<<endl;
Solution2 solution2;
vector<int>result;
result=solution2.grayCode(5);
for(vector<int>::iterator iter=result.begin();iter!=result.end();iter++)
cout<<*iter<<' ';
cout<<endl;
}