问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4050 访问。

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

输入: 43261596

输出: 964176192

解释: 43261596 的二进制表示形式为 00000010100101000001111010011100 ,返回 964176192,其二进制表示形式为 00111001011110000010100101000000 。

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


Reverse bits of a given 32 bits unsigned integer.

Input: 43261596

Output: 964176192

Explanation: 43261596 represented in binary as 00000010100101000001111010011100, return 964176192 represented in binary as 00111001011110000010100101000000.

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


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4050 访问。

public class Program {public static void Main(string[] args) {var n = 43261596U;var res = reverseBits(n);Console.WriteLine(res);n = 13U;res = reverseBits2(n);Console.WriteLine(res);n = 168U;res = reverseBits3(n);Console.WriteLine(res);Console.ReadKey();}public static uint reverseBits(uint n) {//10进制转2进制,除2取余法var res = 0U;var bit = 0;var times = 32;//Math.Ceiling(Math.Log(n, 2));//整型4字节,32位while(n != 0) {//10进制的1,2,3,4,5对应于2进制的1,10,11,100,101//由于2进制的特点,末位数在1,0之间循环//用 n 和 1 做“与运算”若值为1,必为奇数//即除2余1if((n & 1) == 1) {res += (uint)Math.Pow(2, times - bit - 1);}bit++;//2进制右移1位即10进制除2n >>= 1;}return res;}public static uint reverseBits2(uint n) {//定义结果var res = 0U;//执行32次for(var i = 0; i < 32; i++) {//将结果 *2res <<= 1;
#line 100//奇数时,把结果 +1if((n & 1) == 1) res++;//将 n 除以 2n >>= 1;}//返回结果return res;}public static uint reverseBits3(uint n) {var res = 0U;for(var i = 0; i < 32; i++) {res <<= 1;//res = res | (n & 1);//奇数跟0进行“或运算”,原值//偶数跟0进行“或运算”,原值//奇数跟1进行“或运算”,原值//偶数跟1进行“或运算”,原值+1//以下一行代码相当于 #line 100 下的一行res |= (n & 1);n >>= 1;}return res;}}

以上给出3种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4050 访问。

964176192
2952790016
352321536

分析:

显而易见,reverseBits 的时间复杂度为:  ,reverseBits2 和 reverseBits3 的时间复杂度为:  。

C#LeetCode刷题之#190-颠倒二进制位(Reverse Bits)相关推荐

  1. C#LeetCode刷题-位运算

    位运算篇 # 题名 刷题 通过率 难度 78 子集 67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 1 ...

  2. 【Leetcode】[190] 颠倒二进制位

    [Leetcode][190] 颠倒二进制位 Author: Xin Pan Date: 2022.3.13 题目 原题链接 颠倒给定的 32 位无符号整数的二进制位. 解法 考虑使用位运算来做,因为 ...

  3. leetcode#190 颠倒二进制位

    leetcode#190 颠倒二进制位 题目: 颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 00000010100101000001111010011100 输出: 001110010 ...

  4. java二进制反转_Java实现 LeetCode 190 颠倒二进制位

    190. 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001 ...

  5. leetcode刷题目录总结

    题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...

  6. LeetCode刷题笔记汇总

    LeetCode刷题笔记汇总 第一次刷LeetCode写的一些笔记. 1.两数之和 3.无重复字符的最长子串 15.三数之和 18.四数之和 19.删除链表的倒数第 N 个结点 20.有效的括号 21 ...

  7. LeetCode 刷题之路(python版)

    摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...

  8. 个人LeetCode刷题记录(带题目链接及解答)持续更新

    Leetcode 刷题 注:~[完成]代表还有一些方法没看,最后再看 一.一些需要重刷的典型题: 1.快速排序,归并排序,堆排序(递归的思想) 2.链表中的回文链表,其中的快慢指针,多看,多练 3.链 ...

  9. [leetcode刷题]汇总(二)

    文章目录 二分查找 69 x的平方根 367 有效的完全平方数 33 搜索旋转排序数组(中等) 74 搜索二维矩阵(中等) 153 找到旋转数组中的最小值(中等) 动态规划 斐波拉 62 不同路径(中 ...

最新文章

  1. 【图论专题】BFS中的双向广搜 和 A-star
  2. 一份值得收藏的,互联网电商购物车架构演变案例
  3. 十、从中缀向后缀转换表达式
  4. 通达学院计算机组成原理试卷及答案,2021全国网络工程专业大学排名(5篇)
  5. 如何在Word里面自动生成目录
  6. 手把手教你用Python读取Excel
  7. MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
  8. org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state wo
  9. 电子科大考研计算机考研经验,电子科技大学
  10. echarts的tooltip提示框
  11. ADB介绍—— 配置ADB环境变量
  12. html文件上传 用到美化,纯css美化file文件上传控件方法
  13. Matlab 谢尔宾斯基三角形
  14. 知识树 = 系统思维 + 外接大脑
  15. ElasticSearch: 使用Java Api 操作 ES
  16. 孙溟㠭作品《静无尘》
  17. 疫情肆虐,延迟返工,今年的“金三银四”还能照常进行吗?
  18. acrh17华硕固件_华硕路由器Asus RT-ACRH17 OpenWrt,刷openwrt教程
  19. 优秀自我简介200字_自我介绍范文200字10篇
  20. c语言对数组求秩,怎样用C语言求矩阵的秩

热门文章

  1. 字节缓冲流 BufferedOutputStream java
  2. 组合框绑定字符串数组的数据 c# 1614236088
  3. java封装 1210 速记
  4. matplotlib-快速学习折线图-柱状图2个-饼图-0225
  5. pip临时使用国内下载源,提高下载的速度
  6. 记录第二次遇到ERROR! MySQL server PID file could not be found!
  7. 好系统教你如何在Windows中更改文件夹的图标
  8. 如何防止应用程序泄密?
  9. 在团800运维工作总结之couchbase使用
  10. mysql 长时间连接没操作,断开连接