题目链接:gray-code
import java.util.ArrayList;
import java.util.List;
/**
*
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.
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
*
*/
public class GrayCode {
// 12 / 12 test cases passed.
// Status: Accepted
// Runtime: 188 ms
// Submitted: 3 minutes ago
//时间复杂度O(2 ^ n) ,空间复杂度 O(1)
public List<Integer> grayCode(int n) {
List<Integer> graycode = new ArrayList<Integer>();
int total = 1 << n;
for (int i = 0; i < total; i++) {
graycode.add(i ^ (i >> 1)); //格雷码公式 :n ^ (n / 2)
}
return graycode;
}
public static void main(String[] args) {
GrayCode codes = new GrayCode();
System.out.println(codes.grayCode(4));
}
}