生成n位格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。
虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。
找规律
0,1
00,01,11,10
000,001,011,010,110,100,101,111
思路一:n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1
部分伪代码
a(n+1) 长度 = a(n) *2
m= a(n).length
for(int i=0;i<m;i++){
s[i]="0"+ temp[i];
s[m-1-i]="1"+temp[m-1-i]
}
每遍递归里 一次遍历就好
思路二:n+1位格雷码的集合 = n位标准码集合 和 n位标准码集合右移1位 做异或