格雷码 Gray code
一个 n 位二进制的格雷码就是一个包含 2**n 种不同情况的列表,
每一种情况的 n 位二进制数与其上一种情况的 n 位二进制数正好有一位不同
n 位二进制的格雷码生成方式如下:
1. n 位格雷码的 前 2**(n-1) 个代码字等于 n-1 位格雷码的代码字,按顺序书写,加前缀 0
2. n 位格雷码的 后 2**(n-1) 个代码字等于 n-1 位格雷码的代码字,按逆序书写,加前缀 1
使用递归实现:
def gray_code(n): # 递归,代码简单,速度较应用序慢
if n == 1: return ['0','1']
return ['0'+i for i in gray_code(n-1)] + ['1'+i for i in gray_code(n-1)[::-1]]
使用循环顺序实现:
def gray_code_for_2(n): # 循环顺序实现,速度优势
list = ['0', '1']
for i in range(1,n):
left = ['0'+i for i in list]
right = ['1'+i for i in list[::-1]]
list = left + right
return lis