標籤:style blog http color strong io
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 - 001 - 111 - 310 - 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.
這道題木有思路主要是因為不瞭解什麼叫格雷碼。
演算法思路:
思路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 }