Gray Code

来源:互联网 发布:西安知行软件公司 编辑:程序博客网 时间:2024/05/17 09:35

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;}
0 0