关于格雷码的问题

zxpisme 2023-10-03 15:19:37 2

在一组数的编码中,若任意两个相邻(首尾也视为相邻)的代码只有一位二进制数不同,则称这种编码为格雷码。如四位格雷码: 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 结束

广义格雷码应该怎么生成呢各位? 测试样例给了一组数据,看不出来规律啊 这个题思路是啥

[原题链接]https://ykj.cpolar.cn/problem/4172

{{ vote && vote.total.up }}

共 1 条回复

root 站长

试试 dfs,一位一位的生成。