Gray Code
The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
For example, given n = 2, return [0,1,3,2]
. Its gray code sequence is:
00 - 0 01 - 1 11 - 3 10 - 2
Note:
For a given n, a gray code sequence is not uniquely defined.
For example, [0,2,3,1]
is also a valid gray code sequence according to the above definition.
The key to solve this problem is to find the regular pattern of gray code.
n = 0:
n = 1:
n = 2:
n = 3:
The regular pattern here is that the gray code of n is the gray code of n - 1 and the reverse sequence of the gray code of n - 1 plus 1 << n - 1. My java solution is as follows
public class Solution {
public List<Integer> grayCode(int n) {
if (n == 0) {
List<Integer> ret = new ArrayList<Integer>();
ret.add(0);
return ret;
}
List<Integer> temp = grayCode(n - 1);
int addNumber = 1 << n - 1;
List<Integer> ret = new ArrayList<Integer>(temp);
for (int i = temp.size() - 1; i >= 0; i--) {
ret.add(addNumber + temp.get(i));
}
return ret;
}
}