Gray Code

Posted YuriFLAG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gray Code相关的知识,希望对你有一定的参考价值。

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

给定一个整数n,请返回n位的格雷码,顺序为从0开始。

Example: 1 : 0 , 1

                2: 00 01 11 10

                3: 000 001 011 111 110 101

通过上面的观察可以知道, n 位 的gray code 实在 n - 1的基础上 高位 添加 0 和 1 得到的。 并且,前2 ^ n-1 项是在 n - 1位 gray code 的基础上 添加 0 得到的, 而后 2 ^ n -1 项是逆序输出 n - 1位gray code 添加1 得到的。

 1 import java.util.*;
 2  
 3 public class GrayCode {
 4     public String[] getGray(int n) {
 5         String[] result = new String[(int)Math.pow(2, n)];
 6         if (n == 1) {
 7             result[0] = "0";
 8             result[1] = "1";
 9             return result;
10         }
11         String[] tmp = getGray(n - 1);
12         for (int i = 0; i < tmp.length; i++) {
13             result[i] = "0" + tmp[i];
14         }
15         for (int i = tmp.length - 1, j = tmp.length; i >= 0 && j < result.length; i--, j++) {
16             result[j] = "1" + tmp[i];
17         }
18         return result;
19     }
20 }

 

以上是关于Gray Code的主要内容,如果未能解决你的问题,请参考以下文章

89. Gray Code

89. Gray Code

Jan 23 - Gray Code; BackTracking;

Gray Code -- LeetCode

LeetCode89. Gray Code

[LeetCode][JavaScript]Gray Code