The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integerNRepresenting the total number of BITs in the code, print the sequence of Gray code. A gray code sequence must begin with 0.
For example, givenN= 2, return[0,1,3,2]
. Its Gray code sequence is:
00 - 001 - 111 - 310 - 2
Note:
For a givenN, 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.
Https://oj.leetcode.com/problems/gray-code/
Idea: Gray Code definition
Idea: generate a code table recursively.
Idea 2: public method.Gray = (Binary) XOR (Binary> 1)
import java.util.ArrayList;import java.util.List;public class Solution { public List<Integer> grayCode(int n) { List<Integer> res = new ArrayList<Integer>(); if (n == 0) { res.add(0); return res; } List<Integer> pre = grayCode(n - 1); res.addAll(pre); int high = 1 << n - 1; for (int i = pre.size() - 1; i >= 0; i--) res.add(high + pre.get(i)); return res; } public List<Integer> grayCode2(int n) { List<Integer> res = new ArrayList<Integer>(); int count = 1 << n; for (int i = 0; i < count; i++) { res.add(i ^ (i >> 1)); } return res; } public static void main(String[] args) { System.out.println(new Solution().grayCode(3)); }}
View code
Refer:
Http://blog.csdn.net/worldwindjp/article/details/21536103