zoukankan      html  css  js  c++  java
  • [Leetcode]-- 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, print the sequence of gray code. A gray code sequence must begin with 0.

    For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:

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

    Note:
    For a given n, 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.

    000
    001
    011
    010
    110
    111 
    101
    100

    public class Solution {
        public ArrayList<Integer> grayCode(int n) {
            ArrayList<Integer> result = new ArrayList<Integer>();
            
            if(n <= 1){
              result.add(0);
              if(n == 1)
                result.add(1);
                return result;
            }
            
            ArrayList<Integer> pre = grayCode(n-1);
            int highest = 1<<(n-1);
            result.addAll(pre);
            for(int i = pre.size()-1; i>= 0; i--){
                result.add(pre.get(i)+ highest); 
            }
            
            return result;
        }
    }

    二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0);
    格雷码->二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变)。

    public ArrayList<Integer> grayCode(int n) {
            ArrayList<Integer> result = new ArrayList<Integer>();
            int count = 1 << n;
            for(int i = 0; i < count; i++){
                result.add(i^(i >> 1));
            }   
            return result;
        }

    ref: http://www.cnblogs.com/feiling/p/3252084.html 

  • 相关阅读:
    将程序集从GAC中导出
    客户端访问WebService复杂参数类型的使用和参数的序列化与反序列化
    (译Workflow in the 2007 Microsoft Office System)介绍(部分)
    处理PageRequestManager事件
    测试 IPersonalizable接口
    几篇很好的文章
    交换两个数,不引入第三个变量
    Dijkstra算法
    给定一个整数,求它的二进制表示中有多少个1。
    自律
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3548063.html
Copyright © 2011-2022 走看看