lintcode-medium-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, find the sequence of gray code. A gray code sequence must begin with 0
and with cover all 2n integers.
Given n = 2
, return [0,1,3,2]
. Its gray code sequence is:
00 - 0 01 - 1 11 - 3 10 - 2
public class Solution { /** * @param n a number * @return Gray code */ public ArrayList<Integer> grayCode(int n) { // Write your code here ArrayList<Integer> result = new ArrayList<Integer>(); if(n < 0) return result; if(n == 0){ result.add(0); return result; } result.add(0); result.add(1); for(int i = 2; i <= n; i++){ ArrayList<Integer> new_half = new ArrayList<Integer>(); for(int j = result.size() - 1; j >= 0; j--) new_half.add(result.get(j) + (1 << (i - 1))); result.addAll(new_half); } return result; } }