C#LeetCode刷题之#190-颠倒二进制位(Reverse Bits)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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)相关推荐
- C#LeetCode刷题-位运算
位运算篇 # 题名 刷题 通过率 难度 78 子集 67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 1 ...
- 【Leetcode】[190] 颠倒二进制位
[Leetcode][190] 颠倒二进制位 Author: Xin Pan Date: 2022.3.13 题目 原题链接 颠倒给定的 32 位无符号整数的二进制位. 解法 考虑使用位运算来做,因为 ...
- leetcode#190 颠倒二进制位
leetcode#190 颠倒二进制位 题目: 颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 00000010100101000001111010011100 输出: 001110010 ...
- java二进制反转_Java实现 LeetCode 190 颠倒二进制位
190. 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001 ...
- leetcode刷题目录总结
题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...
- LeetCode刷题笔记汇总
LeetCode刷题笔记汇总 第一次刷LeetCode写的一些笔记. 1.两数之和 3.无重复字符的最长子串 15.三数之和 18.四数之和 19.删除链表的倒数第 N 个结点 20.有效的括号 21 ...
- LeetCode 刷题之路(python版)
摘自:https://blog.csdn.net/qq_32384313/article/details/90745354 LeetCode 刷题之路(python版) 小坏wz 2019-06-02 ...
- 个人LeetCode刷题记录(带题目链接及解答)持续更新
Leetcode 刷题 注:~[完成]代表还有一些方法没看,最后再看 一.一些需要重刷的典型题: 1.快速排序,归并排序,堆排序(递归的思想) 2.链表中的回文链表,其中的快慢指针,多看,多练 3.链 ...
- [leetcode刷题]汇总(二)
文章目录 二分查找 69 x的平方根 367 有效的完全平方数 33 搜索旋转排序数组(中等) 74 搜索二维矩阵(中等) 153 找到旋转数组中的最小值(中等) 动态规划 斐波拉 62 不同路径(中 ...
最新文章
- 【图论专题】BFS中的双向广搜 和 A-star
- 一份值得收藏的,互联网电商购物车架构演变案例
- 十、从中缀向后缀转换表达式
- 通达学院计算机组成原理试卷及答案,2021全国网络工程专业大学排名(5篇)
- 如何在Word里面自动生成目录
- 手把手教你用Python读取Excel
- MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
- org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state wo
- 电子科大考研计算机考研经验,电子科技大学
- echarts的tooltip提示框
- ADB介绍—— 配置ADB环境变量
- html文件上传 用到美化,纯css美化file文件上传控件方法
- Matlab 谢尔宾斯基三角形
- 知识树 = 系统思维 + 外接大脑
- ElasticSearch: 使用Java Api 操作 ES
- 孙溟㠭作品《静无尘》
- 疫情肆虐,延迟返工,今年的“金三银四”还能照常进行吗?
- acrh17华硕固件_华硕路由器Asus RT-ACRH17 OpenWrt,刷openwrt教程
- 优秀自我简介200字_自我介绍范文200字10篇
- c语言对数组求秩,怎样用C语言求矩阵的秩