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;
    }
}

 

posted @ 2016-03-22 12:02  哥布林工程师  阅读(127)  评论(0编辑  收藏  举报