89. 格雷编码

设n阶格雷码集合为 G(n),则 G(n+1) 阶格雷码为:
  1.给 G(n)阶格雷码每个元素二进制形式前面添加0,得到 G‘(n)
  2.设 G(n)集合倒序(镜像)为 R(n),给 R(n)每个元素二进制形式前面添加 1,得到 R‘(n)
  3.G(n+1)=G‘(n)∪R‘(n)拼接两个集合即可得到下一阶格雷码

package leetcode;

import java.util.ArrayList;
import java.util.List;

public class demo_89 {
    public List<Integer> grayCode(int n) {
        List<Integer> list=new ArrayList<Integer>();
        list.add(0);
        int init=1;
        for(int i=0;i<n;i++) {
            for(int j=list.size()-1;j>=0;j--) {
                //由于最高位前默认为0,因此G‘(n) = G(n),只需在即G(n)后添加 R‘(n)即可
                list.add(list.get(j)+init);
            }
            //执行init= 1 << i 计算出对应位数,以给 R(n)R(n) 前添加 11 得到对应 R‘(n)R 
            init=init<<1;
        }
        System.out.println(list);
        return list;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_89 d89 =new demo_89();
        d89.grayCode(2);
    }

}

 

89. 格雷编码

上一篇:nginx 配置文件的匹配规则


下一篇:AIApe问答机器人Beta阶段总结