Gray Code
题意
给定n为的格雷码的位数,求返回的格雷码代表的十进制数序列。
解法
有两种方法,一种是回溯,一种是利用格雷码的定义。
回溯的话我们多写几个看看。
当n=1时,返回 0, 1
当n=2时,返回 00, 01, 11, 10
当n=3时,返回 000,001,011,010,110,111,101,100
从上面我们可以发现,n=3的序列是可以由n=2构成的,n=3的前一半序列是n=2序列前面加个0,n=3的后一半序列是n=2序列前面加个1的逆序。由这个定义我们就可以用dfs来得出最后的结果。
还有一个是格雷码的定义,从二进制到格雷码的转换是通过亦或相邻二进制的位数来得到的 。
比如一个二进制为 1001,那么它的格雷码为
1^0 = 1 0^0 = 0 0^1 = 1 1^0 = 1,
则为1101,最后一个0是最高位补上去的。
其实说了这么多,求一个数x的格雷码的十进制表示就是 x^(x>>1)即可。
代码
|
|
|
|