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;
        }
    };
    
    
  • 相关阅读:
    大数据基本概念及Hadoop技术基础
    基于 ReliefF和K-means算法的应用
    利用Hadoop和Spark处理用户心跳周期数据
    Java线程池源码解析及高质量代码案例
    muleESB的第一个开发实例-HelloWorld(二)
    [USACO11JAN]道路和飞机Roads and Planes
    CH6101 最优贸易
    POJ3662 Telephone Lines
    扫描线+线段树例题(HDU1542)
    关于Dinic算法的几点讨论
  • 原文地址:https://www.cnblogs.com/cff2121/p/10824478.html
Copyright © 2011-2022 走看看