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 - 2Note:
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.
这道题木有思路主要是因为不了解什么叫格雷码。
算法思路:
思路1:
格雷码公式法:gray = (binary) xor (binary >> 1)
代码
1 public class Solution { 2 public List<Integer> grayCode(int n) { 3 int size = 1 << n; 4 List<Integer> list = new ArrayList<Integer>(); 5 for(int i = 0; i < size; list.add(i ^ i >> 1),i++); 6 return list; 7 } 8 }
思路2:
不知道公式也没关系,只要弄明白格雷码的定义就好了,递归实现法也不难
代码如下:
1 public class Solution { 2 public List<Integer> grayCode(int n) { 3 if(n == 0){ 4 List<Integer> list = new ArrayList<Integer>(); 5 list.add(0); 6 return list; 7 } 8 List<Integer> list = new ArrayList<Integer>(); 9 List<Integer> l = grayCode(n - 1); 10 list.addAll(l); 11 for(int i = l.size() - 1; i >= 0 ;i--){ 12 list.add(l.get(i) +(1 << (n - 1))); 13 } 14 return list; 15 } 16 }