zoukankan      html  css  js  c++  java
  • [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;
        }
    };
    
    
  • 相关阅读:
    poj_1084 剪枝-IDA*
    搜索算法
    poj_1475 BFS+BFS
    chrome浏览器经常无响应
    charles抓包工具的使用:手机抓包设置和安装证书
    charles抓包工具的使用:概述
    不同局域网如何利用charles对app进行抓包
    fiddler之使用教程(一)
    一点感触
    单元测试框架处理多组数据的另一种写法:基于构造函数和超继承
  • 原文地址:https://www.cnblogs.com/cff2121/p/10824478.html
Copyright © 2011-2022 走看看