一尘不染

如何查找两个数字是否为格雷码序列中的连续数字

java

我正在尝试解决给定两个数字的问题,找出它们是否是格雷码序列中的连续数字,即,如果它们是格雷码邻居,则假定未提及格雷码序列。

我在各种论坛上进行搜索,但找不到正确的答案。如果您可以为此提供解决方案,那就太好了。

我对这个问题的尝试-将两个整数转换为二进制,然后分别将两个数字相加,然后找出两个数字的总和之差。如果差异是1,则它们是格雷码邻居。

但是我觉得这不适用于所有情况。非常感谢您的帮助。提前非常感谢!!!


阅读 150

收藏
2020-12-03

共1个答案

一尘不染

我也必须在面试中解决这个问题。两个值成为格雷码序列的条件之一是它们的值仅相差1位。这是解决此问题的方法:

def isGrayCode(num1, num2):
    differences = 0
    while (num1 > 0 or num2 > 0):
        if ((num1 & 1) != (num2 & 1)):
            differences++
        num1 >>= 1
        num2 >>= 1
    return differences == 1
2020-12-03