zoukankan      html  css  js  c++  java
  • [Swift]LeetCode190. 颠倒二进制位 | Reverse Bits

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10179979.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Reverse bits of a given 32 bits unsigned integer.

    Example 1:

    Input: 00000010100101000001111010011100
    Output: 00111001011110000010100101000000
    Explanation: The input binary string 00000010100101000001111010011100 represents the unsigned integer 43261596, so return 964176192 which its binary representation is 00111001011110000010100101000000.
    

    Example 2:

    Input: 11111111111111111111111111111101
    Output: 10111111111111111111111111111111
    Explanation: The input binary string 11111111111111111111111111111101 represents the unsigned integer 4294967293, so return 3221225471 which its binary representation is 10101111110010110010011101101001.

    Note:

    • Note that in some languages such as Java, there is no unsigned integer type. In this case, both input and output will be given as signed integer type and should not affect your implementation, as the internal binary representation of the integer is the same whether it is signed or unsigned.
    • In Java, the compiler represents the signed integers using 2's complement notation. Therefore, in Example 2 above the input represents the signed integer -3 and the output represents the signed integer -1073741825.

    Follow up:

    If this function is called many times, how would you optimize it?


    颠倒给定的 32 位无符号整数的二进制位。

    示例 1:

    输入: 00000010100101000001111010011100
    输出: 00111001011110000010100101000000
    解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
          因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。

    示例 2:

    输入:11111111111111111111111111111101
    输出:10111111111111111111111111111111
    解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
          因此返回 3221225471 其二进制表示形式为 10101111110010110010011101101001。

    提示:

    • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
    • 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825

    进阶:
    如果多次调用这个函数,你将如何优化你的算法?


    amazing

     1 class Solution {
     2     func reverseBits(_ n: UInt32) -> UInt32 {
     3         var n = n
     4         n = (n >> 16) | (n << 16);
     5         n = ((n & 0xff00ff00) >> 8) | ((n & 0x00ff00ff) << 8);
     6         n = ((n & 0xf0f0f0f0) >> 4) | ((n & 0x0f0f0f0f) << 4);
     7         n = ((n & 0xcccccccc) >> 2) | ((n & 0x33333333) << 2);
     8         n = ((n & 0xaaaaaaaa) >> 1) | ((n & 0x55555555) << 1);
     9         return n;
    10     }
    11 }

    normal

     1 class Solution {
     2     func reverseBits(_ n: UInt32) -> UInt32 {
     3         var res: UInt32 = 0
     4         for i in 0..<32
     5         {
     6             res = (res << 1) + (n >> i & 1)
     7         }
     8         return res
     9     }
    10 }
  • 相关阅读:
    以太坊智能合约 Solidity 的常用数据类型介绍
    使用 Browser-solidity 在 Go-Ethereum1.7.2 上进行简单的智能合约部署
    Linux学习笔记之vim中的替换功能
    深度学习笔记之为什么是SoftMax
    机器学习笔记之Jupyter Notebook各种使用方法
    机器学习笔记之TF-IDF原理及使用
    机器学习笔记之LATEX数学公式基本语法
    机器学习笔记之Anaconda中命令形式安装XGBoost(pip install)
    机器学习笔记之XGBoost实现对鸢尾花数据集分类预测
    ELK学习笔记之Elasticsearch和Kibana数据导出实战
  • 原文地址:https://www.cnblogs.com/strengthen/p/10179979.html
Copyright © 2011-2022 走看看