zoukankan      html  css  js  c++  java
  • 89. Gray Code

    Problem:

    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-1位的格雷码产生n位的格雷码。具体操作为(2进制下):将n-1位的格雷码首位补零,然后按照前面格雷码的倒序接在后面,首位加1。
    以n=2和n=3为例。

    n=2      n=3
    0 00     0 000
    1 01     1 001 
    3 11     3 011
    2 10     2 010
             6 110
             7 111
             5 101
             4 100
    

    这样转换为十进制后可以发现,n位格雷码与n-1位格雷码相比,前面一半的值不变,后面的值为前面顺序颠倒之后的值加上(2^{n-1})

    Solution:

    vector<int> grayCode(int n) {
        vector<int> res(1, 0);
        for (int i = 0; i < n; i++) {
            int size = res.size();
            for (int j = size-1; j >= 0; j--) {
                res.push_back(res[j] + pow(2, i));
                //res.push_back(res[j]|1<<i);    //语法不太懂,暂时留着
            }
        }
        return res;
    }
    

    性能
    Runtime: 4 ms  Memory Usage: 8.7 MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    min25筛
    ngnix安装
    Sublime Text 添加到右键菜单 带菜单图标
    临界区与竟态条件
    cscope 支持C++项目
    内网信息收集
    域权限维持-Hook PasswordChangeNotify
    域权限维持-SID History
    域权限维持-DSRM
    ZooKeeper
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12254774.html
Copyright © 2011-2022 走看看