zoukankan      html  css  js  c++  java
  • leetcode 89 Gray Code ----- java

    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.

    求二进制格雷码

    两种方法:

    1、递归方法:

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

    2、位运算。

    public List<Integer> grayCode(int n) {
            List<Integer> ret = new ArrayList<>();
            ret.add(0);
            for (int i = 1, shift = 1; i <= n; i++) {
                // mirror from previous 2 ^ (i-1) 
                for (int j = shift-1; j >= 0; j--) {
                    // ret.get(j) ^ shift is more efficient here that +
                    ret.add((ret.get(j) ^ shift));
                }
                shift <<= 1;
            }
            
            return ret;
        }
  • 相关阅读:
    iPerf 笔记
    Monkey相关参数 笔记
    adb相关指令 笔记
    Linux常用命令 笔记
    eclipse配置android开发环境并搭建第一个helloWord工程
    python + eclipse + pydev 安装、配置
    print带参数格式
    JS获取按下的键盘字符
    Mysql 创建用户并对其赋予操作权限
    扩展内置对象
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/5978927.html
Copyright © 2011-2022 走看看