码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode: Gray Code [089]

时间:2014-06-01 09:16:29      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:leetcode   算法   面试   

【题目】


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.




【题意】

    本题是有关格雷码转换的,知道二进制转换为格雷码的转换规则,本题就非常easy了。
    给定二进制下的位数n, 要求得到格雷码序列,并输出每个格雷码对应的十进制表示。相邻格雷码之间只有一位不同。
    对于输入的n,格雷码序列可能有多个,题目要求输出任一个序列即可。
    序列必须以0开始。


【思路】

    n位二进制可表示2^n个数,因此格雷码序列长度即为2^n
    我们只需从小到大把二进制转换成对应的格雷码即可,转换规则如下:
    假设二进制数为x, 则其对应的格雷码为x>>1^x
    即x和其本身向右移动一位后的结果做抑或运算。
    
    【注意,n=0是本题认为它能表示一个值0】


【代码】

class Solution {
public:
    vector<int> grayCode(int n) {
        vector<int> result;
        
        int size=1<<n;  //一共可以表示2^n个数
        int x=0;
        while(x<size){
            result.push_back(x>>1^x);   //转换成对应格雷码
            x++;
        }
        return result;
    }
};


LeetCode: Gray Code [089],布布扣,bubuko.com

LeetCode: Gray Code [089]

标签:leetcode   算法   面试   

原文地址:http://blog.csdn.net/harryhuang1990/article/details/27801419

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!