列表

详情


QQ1. 生成格雷码

描述

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。

给定一个整数n,请返回n位的格雷码,顺序为从0开始。

测试样例:
1
返回:["0","1"]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 9ms, 内存消耗: 2732KB, 提交时间: 2022-04-19

class GrayCode {
public:
    vector<string> getGray(int n) {
        // write code here
        vector<string> res;
        string tmp = "";
        for(int i=0;i<n;i++){
            tmp += "0";
        }
        res.emplace_back(tmp);
        for(int i=1;i<=n;i++){
            //对称开始位置
            int idx = pow(2,i-1);
            for(int j = 1;j<=idx;j++){
                //反着取res的值,再加入到res中
                tmp = res[idx-j];
                tmp[n-i] = '1';
                res.emplace_back(tmp);
            }
        }
        return res;
    }
};

C++ 解法, 执行用时: 9ms, 内存消耗: 2740KB, 提交时间: 2022-05-08

class GrayCode {
public:
    vector<string> getGray(int n) {
        int m = 1 << n;
        vector<string> res(m);
        res[0] = string(n, '0');
        for (int i = 1; i <= n; ++i) {
            int idx = 1 << (i - 1);
            for (int j = idx - 1; j >= 0; --j) {
                string t = res[j];
                t[n-i] = '1';
                res[idx++] = t;
            }
        }
        return res;
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 2640KB, 提交时间: 2020-11-01

class GrayCode {
public:
    vector<string> getGray(int n) {
        // write code here
        if(n==0)
            return vector<string>();
        vector<string> svec(1<<n,"");
        svec[0]=string(n,'0');
        svec[1]=svec[0];
        svec[1].back()='1';
        for(int i=0;i<n;i++)
            {
            int num=1<<i;
            for(int j=0;j<num;j++)
                {
                svec[num+j]=svec[num-j-1];
                svec[num+j][n-1-i]='1';
            }
        }
        return svec;
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 2652KB, 提交时间: 2020-08-26

class GrayCode {
public:
    vector<string> getGray(int n) {
        // write code here
        if(n==0)
            return vector<string>();
        vector<string> svec(1<<n,"");
        svec[0]=string(n,'0');
        svec[1]=svec[0];
        svec[1].back()='1';
        for(int i=0;i<n;i++)
            {
            int num=1<<i;
            for(int j=0;j<num;j++)
                {
                svec[num+j]=svec[num-j-1];
                svec[num+j][n-1-i]='1';
            }
        }
        return svec;
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 2656KB, 提交时间: 2020-07-12

class GrayCode {
public:
    vector<string> getGray(int n) {
        // write code here
        if(n==0)
            return vector<string>();
        vector<string> svec(1<<n,"");
        svec[0]=string(n,'0');
        svec[1]=svec[0];
        svec[1].back()='1';
        for(int i=0;i<n;i++)
            {
            int num=1<<i;
            for(int j=0;j<num;j++)
                {
                svec[num+j]=svec[num-j-1];
                svec[num+j][n-1-i]='1';
            }
        }
        return svec;
    }
};

上一题