【对称生成法】格雷编码

一、题目描述:

n 位格雷码序列是一个由 2的n的方次 个整数组成的序列,其中:

  1. 相邻的两个数的二进制表示只有一位不同
  2. 首尾两个数的二进制表示只有一位不同
二、示例:

在这里插入图片描述

三、思路:

对称生成法:

  1. 对n位格雷码,我们将其中每个数加上2的n次方,每个数加上2的n次方得到的序列也符合格雷序列的要求(相邻两个数二进制只有一位不同,首位只有一位不同)。
  2. 将这个序列倒叙加入n位格雷码后,就能得到(n+1)位格雷码 —— 0 ~ 2的(n+1)次方-1
四、图解:

在这里插入图片描述

五、代码:
class Solution {
    public List<Integer> grayCode(int n) {
        List<Integer> list = new ArrayList<>();
        list.add(0); // 第一位为0
        list.add(1); // 第二位为1
        int start = 2;
        while(start <= n){
            // 将倒置后结果加入序列中,得到(start+1)位格雷码
            for(int i=list.size()-1; i>=0; i--){
                list.add(list.get(i) + (int)Math.pow(2, start-1));
            }
            start++;
        }
        return list;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值