1.首先贴上源码
public static String[] GrayCode(int n) {
String[] graycode = new String[(int) Math.pow(2, n)];
if (n == 1) {
graycode[0] = "0";
graycode[1] = "1";
return graycode;
}
String[] last = GrayCode(n - 1);
for (int i = 0; i < last.length; i++) {
if(i == 0 || i%2 == 0) {
graycode[2*i] = last[i] + "0";
graycode[2*i+1] = last[i] + "1";
}
else {
graycode[2*i] = last[i] + "1";
graycode[2*i+1] = last[i] + "0";
}
}
return graycode;
}
public static void main(String args[]) {
String[] res=GrayCode(5);
for(int i=0;i<=res.length-1;i++) {
System.out.printf("%s\n",res[i]);
}
}
2.实现步骤(以生成3位格雷码为例)
第一步:产生 0, 1 两个字符串。
第二步:在第一步的基础上,每一个字符串都加上0和1,但是每次只能加一个,所以得做两次,注意根据i的不同加0和1的顺序也不同。
第三步:在第二步的基础上,再给每个字符串都加上0和1,同样,每次只能加一个,这样就变成了000,001,011,010,110,111,101,100。
好了,这样就把3位元格雷码生成好了,以此类推可以生成任意长度的格雷码。
3.添加0,1或者1,0的规则
以上就是个人对格雷码的理解,加0,1规则按照自己的理解修改了一下,这里参考了另外一位博主。
参考:https://blog.csdn.net/hanghang121/article/details/23759701