• [LeetCode] 89. Gray Code


    The gray code is a binary numeral system where two successive values differ in only one bit.

    Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

    Example 1:

    Input: 2
    Output: [0,1,3,2]
    Explanation:
    00 - 0
    01 - 1
    11 - 3
    10 - 2
    
    For a given n, a gray code sequence may not be uniquely defined.
    For example, [0,2,3,1] is also a valid gray code sequence.
    
    00 - 0
    10 - 2
    11 - 3
    01 - 1
    

    Example 2:

    Input: 0
    Output: [0]
    Explanation: We define the gray code sequence to begin with 0.
                 A gray code sequence of n has size = 2n, which for n = 0 the size is 20 = 1.
                 Therefore, for n = 0 the gray code sequence is [0].


    题目要求写出相邻二进制码之间只有一位不同的二进制码序列,二进制码的长度为n。并且二进制码序列以0开头。

    分析:一位二进制码是0 1
    二位二进制码是00 01 10 11
    三位二进制码是000 001 010 011 111 110 101 100
    可以看出n+1位二进制码就是的后n位镜像对称,然后后边的2^n/2位在首位加上1即可。如下图所示:

    因此使用递归法产生多位二进制码。首位的1相当于当前二进制码+1的二进制码无符号左移n-1位。

    代码展示:

    class Solution {
    public:
        vector<int> grayCode(int n) {
            vector<int> res;
            if(n==0){
                res.push_back(0);
                return res;
            }
            vector<int> temp = grayCode(n-1);
            for(int i=0;i<temp.size();++i)res.push_back(temp[i]);
            for(int i=temp.size()-1;i>=0;--i)res.push_back(temp[i]+(1<<n-1));
            return res;
        }
    };
    
    
  • 相关阅读:
    ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法
    Identity(三)
    数字证书的使用
    自建mvc5项目里几个类图
    asp.net MVC 常见安全问题及解决方案
    security相关链接整理
    js面向对象编程:if中可以使用哪些作为判断条件呢?
    c#创建Windows service (Windows 服务)基础教程
    angular1框架前台笔记
    angular1.几框架新接口添加
  • 原文地址:https://www.cnblogs.com/cff2121/p/10824478.html
Copyright © 2020-2023  润新知