zoukankan      html  css  js  c++  java
  • [LeetCode] 89. 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.

    Example 1:

    Input: 2
    Output: [0,1,3,2]
    Explanation:
    00 - 0
    01 - 1
    11 - 3
    10 - 2
    
    For a given n, a gray code sequence may not be uniquely defined.
    For example, [0,2,3,1] is also a valid gray code sequence.
    
    00 - 0
    10 - 2
    11 - 3
    01 - 1
    

    Example 2:

    Input: 0
    Output: [0]
    Explanation: We define the gray code sequence to begin with 0.
                 A gray sequence of n has size = 2n, which for n = 0 the size is 20 = 1.
                 Therefore, for n = 0 the gray code sequence is [0].

    首先要清楚什么是格雷码,然后用位操作来处理。

    Java:

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

    Java:

    public List<Integer> grayCode(int n) {
        List<Integer> rs=new ArrayList<Integer>();
        rs.add(0);
        for(int i=0;i<n;i++){
            int size=rs.size();
            for(int k=size-1;k>=0;k--)
                rs.add(rs.get(k) | 1<<i);
        }
        return rs;
    }    

    Python:

    class Solution(object):
        def grayCode(self, n):
            """
            :type n: int
            :rtype: List[int]
            """
            result = [0]
            for i in xrange(n):
                for n in reversed(result):
                    result.append(1 << i | n)
            return result
    

    Python:

    # Proof of closed form formula could be found here:
    # http://math.stackexchange.com/questions/425894/proof-of-closed-form-formula-to-convert-a-binary-number-to-its-gray-code
    class Solution2(object):
        def grayCode(self, n):
            """
            :type n: int
            :rtype: List[int]
            """
            return [i >> 1 ^ i for i in xrange(1 << n)]
    

    C++:

    // Time:  (2^n)
    // Space: O(1)
    class Solution {
    public:
        vector<int> grayCode(int n) {
            vector<int> result = {0};
            for (int i = 0; i < n; ++i) {
                for (int j = result.size() - 1; j >= 0; --j) {
                    result.emplace_back(1 << i | result[j]);
                }
            }
            return result;
        }
    };
    

    C++:  

    // Time:  (2^n)
    // Space: O(1)
    // Proof of closed form formula could be found here:
    // http://math.stackexchange.com/questions/425894/proof-of-closed-form-formula-to-convert-a-binary-number-to-its-gray-code
    class Solution2 {
    public:
        vector<int> grayCode(int n) {
            vector<int> result;
            for (int i = 0; i < 1 << n; ++i) {
                result.emplace_back(i >> 1 ^ i);
            }
            return result;
        }
    };
    

      

        

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    [Misc ]bw 注入过程 150
    [Misc]2015 RCTF 日志记录
    [课堂笔记]铁三Linux取证
    [Web] 赛博地球杯 源码泄露
    ROPgadget 工具
    一步一步学ROP之linux x86 学习笔记
    Linux环境崩溃生成core文件以及调试
    文件头文件尾总结
    Linux (x86) Exploit Development Series 阅读笔记level1 Classic Stack Based Buffer Overflow
    Python 进制转换
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9678749.html
Copyright © 2011-2022 走看看