构造格雷码

学过数字电路的应该都认识格雷码,它由n01字符串表示,相邻两个格雷码只有一位01不同。

长度(位)

01)串

N=1

0

1

 

 

N=2

00

01

 

 

11

10

 

 

N=3

000

001

011

010

110

111

101

100

 根据上表,很容易得到递归的算法:

int a[ (1<<10) + 1 ]; void gray(int n) { if(n == 1){ a[1] = 0; a[2] = 1; return; } gray(n-1); for(int k = 1<<(n-1) , i = k ; i > 0 ; i–) a[ 2*k – i + 1 ] = a[i] + k; }

点赞