在一组数的编码中,若任意两个相邻(首尾也视为相邻)的代码只有一位二进制数不同,则称这种编码为格雷码。如四位格雷码: 0000、0001、0011、0010、0110、0111、0101、0100、1100、1101、1111、1110、1010、1011、1001、1000 现在将格雷码扩展至其他进制,仍然是相邻两个数只能有一位不同。输入两个正整数n,m分别表示长度和进制,每行输出一个n位m进制数,输出任意一种编码即可。
生成方法
就目前我知道的方法如下:
- 最右边一位取反
- 查找最右边的1,他的左边取反
- 重复以上步骤
比如:
000 最右边取反 -> 001
001 查找最右边的1,他的左边取反 -> 011
011 最右边取反 -> 010
010 查找最右边的1,他的左边取反 -> 110
110 最右边取反 -> 111
111 查找最右边的1,他的左边取反 -> 101
101 最右边取反 -> 100
100 结束
广义格雷码应该怎么生成呢各位? 测试样例给了一组数据,看不出来规律啊 这个题思路是啥
共 1 条回复
试试 dfs,一位一位的生成。