美文网首页
89. Gray Code

89. Gray Code

作者: Nautilus1 | 来源:发表于2017-11-08 17:19 被阅读0次

题目描述:给非负整数 n 表示二进制位数,输出所有的 n 位格雷码,以0开始。

分析:时间复杂度O(2^n),空间O(1)。

代码:用格雷码的数学公式将0 ~ 2^n - 1的所有整数转化为格雷码。公式为:整数 n 的格雷码是 n xor (n / 2),即 n 与 n 的一半异或。异或位运算:

  • 与0异或的结果还是原数
  • 与1异或 的结果是每位变为其相反数
class Solution {
public:
    vector<int> grayCode(int n) {
        vector<int> ans;
        int sz = 1 << n;
        ans.reserve(sz);             //reserve函数用来给vector预分配存储区大小,但没有给这段内存进行初始化。即reserve 函数分配出来的内存空间,只是表示vector可以利用这部分内存,但vector不能有效地访问这些内存空间,访问的时候就会出现越界现象,导致程序崩溃。故不能用v[i]这种下标访问
        for (int i = 0; i < sz; i ++)
            ans.push_back( btog(i) );
        return ans;
    }
    int btog(int n)          //二进制数转化为格雷码
    {
        return n ^ (n >> 1);
    }
};

相关文章

  • [Math]89. Gray Code

    分类:Math 时间复杂度: O(n) 空间复杂度: O(n) 89. Gray Code The gray co...

  • 89. Gray Code

    这题做的很虚, 嗯,居然过了 题目中的一种做法的复现: 打死我吧,打死我我可能会想出来这种办法

  • 89. Gray Code

    题目描述:给非负整数 n 表示二进制位数,输出所有的 n 位格雷码,以0开始。 分析:时间复杂度O(2^n),空间...

  • 89. Gray Code

  • 89. Gray Code

    i = i^(i/2) 别问我咋的出来的, 不知道。。。

  • 89. Gray Code

    The gray code is a binary numeral system where two succes...

  • 89. Gray Code

    题目链接 https://leetcode.com/problems/gray-code/ 思路 假设n-1已经求...

  • Leetcode 89. Gray Code

    文章作者:Tyan博客:noahsnail.com | CSDN | 简书 1. Description 2. S...

  • Leetcode 89. Gray Code

    The gray code is a binary numeral system where two succes...

  • LeetCode笔记:89. Gray Code

    问题: The gray code is a binary numeral system where two su...

网友评论

      本文标题:89. Gray Code

      本文链接:https://www.haomeiwen.com/subject/xqdemxtx.html