zoukankan      html  css  js  c++  java
  • [leetcode]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. For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

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

    Gray Code, 每次看每次都不记得。写下来让自己好温习。

    Gray Code 0 = 0, 下一项是toggle最右边的bit(LSB), 再下一项是toggle最右边值为 “1” bit的左边一个bit。然后重复

    如: 3bit

    Gray Code:  000, 001, 011, 010, 110, 111, 101, 100, 最右边值为 “1” 的bit在最左边了,结束。

    Binary      :  000, 001, 010, 011, 100, 101, 110, 111

    再者就是Binary Code 转换为Gray Code了。

    如:

      Binary Code :1011 要转换成Gray Code

      1011 = 1(照写第一位), 1(第一位与第二位异或 1^0 = 1), 1(第二位异或第三位, 0^1=1), 0 (1^1 =0) = 1110

      其实就等于 (1011 >> 1) ^ 1011 = 1110

    有了上面的等式写code就简单了

    class Solution {
    public:
        vector<int> grayCode(int n) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            int size = 1<<n;
            vector<int> grayCodes;
            grayCodes.resize(size);
    
            for (int i = 0; i < size; i++){
                int gCode = i ^ i>>1;
                grayCodes[i] = gCode;
            }
    
            return grayCodes;
        }
    };

    EOF

  • 相关阅读:
    Next Permutation
    Substring with Concatenation of All Words
    Divide Two Integers
    Remove Duplicates from Sorted Array
    3sum closest
    ThreadPoolExecutor参数与拒绝策略
    多线程情况下ArrayList 如何解决线性安全问题
    ArrayList扩容机制jdk1.8
    SpringCloud--工作流程(好文)
    Java面试——TCP与HTTP
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2840437.html
Copyright © 2011-2022 走看看