89-グレイ符号化

1716 ワード

89-グレイ符号化


グレイ符号化はバイナリデジタルシステムであり,このシステムでは2つの連続した数値は1桁の差しかない.
符号化総ビット数を表す非負の整数nが与えられ、そのグレイ符号化シーケンスが印刷される.グレイ符号化シーケンスは0で始まる必要があります.
例1:
 : 2
 : [0,1,3,2]
 :
00 - 0
01 - 1
11 - 3
10 - 2

  n, 。
 ,[0,2,3,1]  。

00 - 0
10 - 2
11 - 3
01 - 1

例2:
 : 0
 : [0]
 :   0  。
       n  ,  2n。  n = 0  ,  20 = 1。
      ,  n = 0  ,  [0]。

ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/gray-code著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
    public List grayCode(int n) {
        List res = new ArrayList<>();
        if(n == 0) {
            res.add(0);
            return res;
        }

        res.add(0);
        res.add(1);
        int i = 1;
        while (n > 1){
            Deque tmp = new LinkedList<>();
            for(Integer item : res) {
                tmp.addFirst(item + (int) Math.pow(2, i));
            }
            res.addAll(tmp);
            n--;
            i++;
        }
        return res;
    }
    public List grayCode(int n) {
        /**
         , G(i) = i ^ (i/2);
          n = 3: 
        G(0) = 000, 
        G(1) = 1 ^ 0 = 001 ^ 000 = 001
        G(2) = 2 ^ 1 = 010 ^ 001 = 011 
        G(3) = 3 ^ 1 = 011 ^ 001 = 010
        G(4) = 4 ^ 2 = 100 ^ 010 = 110
        G(5) = 5 ^ 2 = 101 ^ 010 = 111
        G(6) = 6 ^ 3 = 110 ^ 011 = 101
        G(7) = 7 ^ 3 = 111 ^ 011 = 100
        **/
        List ret = new ArrayList<>();
        for(int i = 0; i < 1<>1);
        return ret;
    }