Gray Code(格雷編碼)

weixin_33850890發表於2017-10-10

http://www.lintcode.com/en/problem/gray-code/

import java.util.ArrayList;

/**
 * 如n=2時,格雷碼為00,01,11,10.
 * 如需生成n=3的格雷碼只需先將原序列高位加0變成000,001,011,010,
 * 再將原序列在高位加1並逆向新增到剛才生成的序列尾部,
 * 即000,001,011,010,110,111,101,100。
 * 也就是說,n+1位元格雷碼是基於n位元格雷碼產生的。
 */
public class Solution {
    /**
     * @param n a number
     * @return Gray code
     */
    public ArrayList<Integer> grayCode(int n) {
        // Write your code here
        ArrayList<Integer> list = new ArrayList();
        if (n == 0) {
            list.add(0);
            return list;
        }
        if (n == 1) {
            list.add(0);
            list.add(1);
            return list;
        }
        ArrayList<Integer> code = grayCode(n - 1);
        int factor = 1 << (n - 1);
        list.addAll(code);
        for (int i = code.size() - 1; i >= 0; i--) {
            list.add(code.get(i) + factor);
        }
        return list;
    }
}

相關文章