leetcode89:格雷码

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。

格雷码的定义不啰嗦了,在评论里发现了一个大神的解答,记录一下,以后碰上了可以用这个方法。
在这里插入图片描述
正如评论里的,左移一位,再求得时候 G【i】 = i^(i/2) //⇒ i^(i>>1);

附带维基百科:
二进制数转格雷码
(假设以二进制为0的值做为格雷码的0)
G:格雷码 B:二进制码 n:正在计算的位
根据格雷码的定义可得:
G(n) = B(n+1) XOR B(n)

public List<Integer> grayCode(int n) {
        
        List<Integer> list = new ArrayList<Integer>();
        
     for(int i = 0; i < 1<<n; ++i)
            list.add(i ^ i>>1);
        return list;
        
            
    }
发布了315 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39137699/article/details/90606863