Skip to content

Latest commit

 

History

History
 
 

089.Gray-Code

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

089.Gray-Code

一个比较好理解、记忆和实现的生成算法如下:

假设我们已经有了两位的格雷码:00,01,11,10,如何生成三位的格雷码呢?

第一步将其镜像翻转并添加到自身的队列后面,得到00,01,11,10,||10,11,01,00。显然,除了镜像边缘的两个数(10和10),其他的数相邻之间都满足differ by 1 bit的关系。

然后,我们再将前一半的数最高位设为0,后一半的数最高位设为1,就得到000,001,011,010,||110,111,101,100.此时,镜像边缘的两个数也满足differ by 1 bit的关系,而其他位置的数相邻之间的格雷码约束依然不变。于是,这就得到了三位的格雷码!

我们循环利用上述的算法,不断往后推进,可以得到任意n位数的格雷码!

LC 1238. Circular Permutation in Binary Representation 和本题一模一样。

Leetcode Link