LeetCode89:Gray Code

原创 2015年07月07日 15:59:59

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
Note:
For a given n, a gray code sequence is not uniquely defined.

For example, [0,2,3,1] is also a valid gray code sequence according to the above definition.

For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.


解法一

这道题感觉是一个找规律的题目,找到规律后就很好求解,感觉不是一道回溯的题。
对于n=2,它的结果包括n=1时的结果左边补零,以及逆序遍历n=1时的结果左边补1,
规律如下图,列出了n=1,n=2,n=3时的情况。

这里写图片描述

根据这个规律如果已知n=k的情况,那么n=k+1的结果包括对n=k的结果左边补零,即保存不变,然后逆序遍历n=k的结果左边补1即可。
runtime:4ms

class Solution {
public:

    vector<int> grayCode(int n) {
        vector<int> result(1);
        for(int i=0;i<n;i++)
        {
                for(int j=result.size()-1;j>=0;j--)
                {
                   result.push_back((1<<i)+result[j]);
                }
        }
        return result;
    }
};

解法二

解法二就涉及到gray code的数学知识了,要是知道这个数学知识,可以在几分钟之内就解出这道题。
格雷码可以由对应的十进制数求出:grayCode=i^i>>1
runtime:4ms

class Solution {
public:
     vector<int> grayCode(int n) {
         vector<int> result;
         for(int i=0;i<1<<n;i++)
         {
             result.push_back(i^i>>1);
         }
         return result;
     }

};

LeetCode --- 89. Gray Code

题目链接:Gray Code The gray code is a binary numeral system where two successive values differ in only ...
  • makuiyu
  • makuiyu
  • 2015年04月07日 21:55
  • 1945

LeetCode(89)GrayCode

题目如下: The gray code is a binary numeral system where two successive values differ in only one bit. G...
  • feliciafay
  • feliciafay
  • 2014年02月14日 08:07
  • 2131

[LeetCode]89.Gray Code

【题目】 The gray code is a binary numeral system where two successive values differ in only one bit. ...
  • SunnyYoona
  • SunnyYoona
  • 2014年01月23日 17:04
  • 2387

LeetCode(一)关于GrayCode的实现

在LeetCode上面有一道题,是关于Gray Code的实现的。 GrayCode是这样一种编码: 1 位Gray Code : 0 12 位Gray Code: 先添加一个镜像,如下: 0 1 1...
  • foolsheep
  • foolsheep
  • 2014年03月21日 23:02
  • 1319

格雷码Gray Code

http://blog.csdn.net/pipisorry/article/details/72356418格雷码简介  在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格...
  • pipisorry
  • pipisorry
  • 2017年05月18日 11:02
  • 1292

递归——生成格雷码(gray code)

题目描述 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。 给定一个整数n,请...
  • jingsuwen1
  • jingsuwen1
  • 2016年08月03日 10:56
  • 532

递归算法+奇妙规律 89. Gray Code

参考分析见链接 http://blog.csdn.net/makuiyu/article/details/44926463 转载: 题目链接:Gray Code The gray code is...
  • u012985132
  • u012985132
  • 2016年07月05日 21:21
  • 152

LeetCode题目 Gray Code 的解法与疑问

vector grayCode(int n) { vector Bits(1,0); for(int GrayDigit = 0;GrayDigit { int count = Bits....
  • catsanddogsman
  • catsanddogsman
  • 2014年06月28日 13:29
  • 380

Gray Code 简介及生成

Gray Code 简介及生成
  • Tc_To_Top
  • Tc_To_Top
  • 2015年03月11日 21:05
  • 771

格雷码(gray code)

格雷码是二进制数字系统,
  • bdss58
  • bdss58
  • 2014年09月17日 21:30
  • 434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode89:Gray Code
举报原因:
原因补充:

(最多只允许输入30个字)