首页 > 代码库 > LeetCode: Gray Code [089]
LeetCode: Gray Code [089]
【题目】
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; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。