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

     1 public class Solution {
     2     public ArrayList<Integer> grayCode(int n) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         ArrayList<Integer> result = new ArrayList<Integer>();
     6         if(n <= 1){
     7             result.add(0);
     8             if(n == 1){
     9                 result.add(1);
    10             }
    11             return result;
    12         }
    13         
    14         ArrayList<Integer> pre = grayCode(n - 1);
    15         int highest = 1 << (n - 1);
    16         result.addAll(pre);
    17         for(int i = pre.size() - 1; i >= 0 ; i --){
    18             result.add(pre.get(i) + highest);
    19         }
    20         return result;
    21     }
    22 }

    解2:

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

     1 public ArrayList<Integer> grayCode(int n) {
     2         // Start typing your Java solution below
     3         // DO NOT write main() function
     4         ArrayList<Integer> result = new ArrayList<Integer>();
     5         int count = 1 << n;
     6         for(int i = 0; i < count; i++){
     7             result.add(i^(i >> 1));
     8         }
     9         
    10         return result;
    11     }
  • 相关阅读:
    ES6 数值
    ES6 字符串
    ES6 Reflect 与 Proxy
    ES6 Map 与 Set
    es6 Symbol
    新兴的API(fileReader、geolocation、web计时、web worker)
    浏览器数据库 IndexedDB 入门教程
    离线应用与客户端存储(cookie storage indexedDB)
    javascript高级技巧篇(作用域安全、防篡改、惰性载入、节流、自定义事件,拖放)
    ajax与comet
  • 原文地址:https://www.cnblogs.com/feiling/p/3252084.html
Copyright © 2011-2022 走看看