【C】190 颠倒二进制位

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

提示:

请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。

解法一

#include <stdint.h>

uint32_t reverseBits(uint32_t n) {
    uint32_t res = 0;
    int i;
    for (i = 0; i < 32; i++) {
        res <<= 1;
        res |= n & 1;
        n >>= 1;
    }
    return res;
}

从给定的 32 位无符号整数 n 的最低位开始,逐位取出并存放到结果 res 的最高位,然后 n 向右移动一位,res 向左移动一位,直到 n 的所有位都取完

时间复杂度分析

原始算法中,我们需要遍历给定的 32 位无符号整数的所有位,进行逐位的颠倒操作。
由于只有固定的 32 位,因此遍历的时间复杂度为 O(32),即 O(1)。

空间复杂度分析

原始算法并没有使用额外的空间,只使用了几个整型变量来保存中间结果,因此空间复杂度为 O(1)。

解法二

#include <stdint.h>

uint32_t reverseBits(uint32_t n) {
    n = (n >> 16) | (n << 16);
    n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8);
    n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4);
    n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2);
    n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1);
    return n;
}

通过位运算来同时颠倒相邻的位

时间复杂度分析

优化后的算法通过位运算来同时颠倒相邻的位,而不是逐位进行操作。
通过多次使用位移和按位与运算,将原始的 32 位整数颠倒。
优化后算法的时间复杂度取决于位运算的时间复杂度,位运算的时间复杂度通常为 O(1)。
空间复杂度分析

优化后算法仍然只使用了几个整型变量来保存中间结果,因此空间复杂度也为 O(1)。

相关推荐

  1. C190 颠倒二进制

    2024-05-03 00:50:04       14 阅读
  2. leetcode-颠倒二进制

    2024-05-03 00:50:04       40 阅读
  3. LeetCode刷题笔记第190题:颠倒二进制

    2024-05-03 00:50:04       11 阅读
  4. 【leetcode热题】颠倒二进制

    2024-05-03 00:50:04       22 阅读
  5. 运算 -力扣90. 颠倒二进制

    2024-05-03 00:50:04       13 阅读
  6. c++翻转一个无符号数的二进制

    2024-05-03 00:50:04       14 阅读
  7. C语言,打印一个数二进制的偶数和奇数

    2024-05-03 00:50:04       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 00:50:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 00:50:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 00:50:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 00:50:04       20 阅读

热门阅读

  1. 【SSL 1967】A和B

    2024-05-03 00:50:04       11 阅读
  2. 《Redis使用手册之持久化存储》

    2024-05-03 00:50:04       12 阅读
  3. 21-30图表

    2024-05-03 00:50:04       10 阅读
  4. JDO还有人用吗

    2024-05-03 00:50:04       9 阅读
  5. 【Flask 系统教程 1】入门及配置

    2024-05-03 00:50:04       11 阅读
  6. springboot新闻推荐系统 - 源码免费(私信领取)

    2024-05-03 00:50:04       9 阅读
  7. 探索“cd”命令:通往数字世界的奇幻之旅

    2024-05-03 00:50:04       11 阅读
  8. TCP三次握手

    2024-05-03 00:50:04       11 阅读
  9. go开发环境安装配置(vscode)

    2024-05-03 00:50:04       10 阅读
  10. WebGL是啥

    2024-05-03 00:50:04       12 阅读
  11. C/C++ 字符串与时间戳互相转换

    2024-05-03 00:50:04       10 阅读