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余1
if((n & 1) == 1) {
res += (uint)Math.Pow(2, times - bit - 1);
}
bit++;
//2进制右移1位即10进制除2
n >>= 1;
}
return res;
}
public static uint reverseBits2(uint n) {
//定义结果
var res = 0U;
//执行32次
for(var i = 0; i < 32; i++) {
//将结果 *2
res <<= 1;
#line 100
//奇数时,把结果 +1
if((n & 1) == 1) res++;
//将 n 除以 2
n >>= 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)的更多相关文章
- [Swift]LeetCode190. 颠倒二进制位 | Reverse Bits
Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 00000010100101000001111010011100 ...
- 【leetcode刷题笔记】Number of 1 Bits
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ...
- C#LeetCode刷题-位运算
位运算篇 # 题名 刷题 通过率 难度 78 子集 67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 ...
- Java实现 LeetCode 190 颠倒二进制位
190. 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001 ...
- LeetCode刷题专栏第一篇--思维导图&时间安排
昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...
- leetcode 刷题进展
最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多 前200的吃透了 足以应付非算法岗 ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- LeetCode刷题总结之双指针法
Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...
随机推荐
- JS 原型与原型链终极详解(二)
四. __proto__ JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象. 对象 person1 有一个 __pr ...
- 如何获取json某一级节点的数据
如何获取json某一级节点的数据 最近做项目有获取和设置固定格式某一级节点值的需求.但是要一级一级地取对于多级的结构来说代码过于冗余且重复,于是写了个递归的方法根据json路径完成值的定点操作.废话不 ...
- 使用iOS网络请求
https://github.com/yuantiku/YTKNetwork/blob/master/Docs/2.0_MigrationGuide_cn.md
- 7个获取访问者真实IP的方法,速学!!!
通常情况下,网站访问并不是简单地从用户的浏览器直达服务器,中间可能部署有CDN.WAF.高防.例如,采用这样的架构:“用户 > CDN/WAF/高防 > 源站服务器” .那么,在经过多层代 ...
- Android存储--SharedPreferences
简介 在Android中,主要有以下几种存储方式: SharedPreferences,在键值对中存储私有原始数据. 内部存储,在设备内存中存储私有数据. 官方示例: String FILENAME ...
- java JDBC自我总结
preparedstatement和statement的区别 当不需要预编译时(不需要占位符)可以选用statement,存在不安全 当有占位符(?)时,需要选用preparedstatement s ...
- 手牵手,从零学习Vue源码 系列二(变化侦测篇)
系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...
- Django开发之Ajax POST提交403报错
问题现象 Django开发时,前端post提交数据时,由于csrf机制,如果不做处理会报403报错 问题解决 通过在data字段中添加 csrfmiddlewaretoken: '{{ csrf_to ...
- Fortify Audit Workbench 笔记 Privacy Violation 隐私泄露
Privacy Violation 隐私泄露 Abstract 对各种机密信息处理不当,如客户密码或社会保障号码,会危及到用户的个人隐私,这是一种非法行为. Explanation Privacy V ...
- Day03_企业权限管理(SSM整合)
学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...