面试题-格雷码的实现

来源:互联网 发布:win10专业版网络掉线 编辑:程序博客网 时间:2024/05/20 07:49

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。
给定一个整数n,请返回n位的格雷码,顺序为从0开始。

格雷码介绍

public class 格雷码 {    public static String[] getGray(int n) {        //总共需要的位数           String grayCode[]=new String[(int)Math.pow(2,n)];            if(n==1){            //位数为1为递归结束情况,规律:                /*                1、除了最高位(左边第一位),格雷码的位元完全上下对称(看下面列表)。                比如第一个格雷码与最后一个格雷码对称(除了第一位),第二个格雷码与倒数第二个对称,以此类推。                2、最小的重复单元是 0 , 1。                000                001                011                010                110                111                101                100                  */                grayCode[0]="0";                grayCode[1]="1";                return grayCode;            }            //递归前n-1的格雷码                String last[]=getGray(n-1);            //格雷码计算方式,前一次格雷码分两部分,假设01            for(int i=0;i<last.length;i++){                grayCode[i]="0"+last[i];//前半部分的二进制码前加 0                grayCode[grayCode.length-i-1]="1"+last[i];//后半部分的二进制码前加1            }            return grayCode;        }    public static void main(String[] args) {        String[] strings=getGray(10);        for (String string : strings) {            System.out.println(string);        }    }}
1 0
原创粉丝点击