zoukankan      html  css  js  c++  java
  • [Leetcode] Gray Code

    he 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.

    For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

    00 - 0
    01 - 1
    11 - 3
    10 - 2
    

    Note:
    For a given n, a gray code sequence is not uniquely defined.

    For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.

    For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.

    脑子有点乱。还得再想想。

    异或转换

    二进制码→格雷码(编码)
    此方法从对应的n位二进制码字中直接得到n位格雷码码字,步骤如下:
    1. 对n位二进制的码字,从右到左,以0到n-1编号
    2. 如果二进制码字的第i位和i+1位相同,则对应的格雷码的第i位为0,否则为1(当i+1=n时,二进制码字的第n位被认为是0,即第n-1位不变)[5]
    公式表示
    (G:格雷码,B:二进制码)
    例如:二进制码0101,为4位数,所以其所转为之格雷码也必为4位数,因此可取转成之二进位码第五位为0,即0 b3 b2 b1 b0。
    0 xor 0=0,所以g3=0
    0 xor 1=1,所以g2=1
    1 xor 0=1,所以g1=1
    0 xor 1=1,所以g0=1
    因此所转换为之格雷码为0111
    格雷码二进制码(解码)
    从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。依次异或,直到最低位。依次异或转换后的值(二进制数)就是格雷码转换后二进制码的值。
    公式表示
    (G:格雷码,B:二进制码)
    原码:p[n:0];格雷码:c[n:0](n∈N);编码:c=G(p);解码:p=F(c);
    书写时按从左向右标号依次减小,即MSB->LSB,编解码也按此顺序进行
     1 class Solution {
     2 public:
     3     vector<int> grayCode(int n) {
     4         vector<int> res;
     5         for (int i = 0; i < pow(2,n); ++i) {
     6             res.push_back((i / 2) ^ i);
     7         }
     8         return res;
     9     }
    10 };
  • 相关阅读:
    Anaconda环境下安装库
    数据库定义、性质、演变
    web测试与app测试区别
    黑盒测试用例设计方法
    软件测试黑盒、灰盒、白盒测试的区别
    web端指什么?
    apache、tomcat和svn有什么作用,区别是什么
    H5如何测试?
    软件测试工具
    web与app测试重点
  • 原文地址:https://www.cnblogs.com/easonliu/p/3657015.html
Copyright © 2011-2022 走看看