leetcode 190. Reverse Bits-二进制翻转|位运算
2016-05-10 13:25
429 查看
原题链接:190. Reverse Bits
【思路】
我们首先要注意 int 在内存中以二进制形式存储,占据32位。我们用一个 int 型整数 ans 来记录结果,我们采用移位操作,原因有两点:1. 注意到移位操作比乘2、除2操作效率更高,2. 移位操作很好地绕开了整型运算的溢出以及符号问题。在每次循环中:ans 每次左移一位,当 n 的最低位为1时,ans 的最低位就变为1,n 每次右移一位。总共进行32次循环:
cases passed. Runtime: 2
ms Your runtime beats 44.10% of javasubmissions.
【补充】
上面的解法是每次只需移动1位,这种解法是每第 i 次循环移动 i 位:
cases passed. Runtime: 2 ms Your runtime beats 44.10% of javasubmissions.
【思路】
我们首先要注意 int 在内存中以二进制形式存储,占据32位。我们用一个 int 型整数 ans 来记录结果,我们采用移位操作,原因有两点:1. 注意到移位操作比乘2、除2操作效率更高,2. 移位操作很好地绕开了整型运算的溢出以及符号问题。在每次循环中:ans 每次左移一位,当 n 的最低位为1时,ans 的最低位就变为1,n 每次右移一位。总共进行32次循环:
public int reverseBits(int n) { int ans = 0; for (int i = 0; i < 32; i++) { ans <<= 1; if ((n & 1) == 1) ans++; n >>= 1; } return ans; }600 / 600 test
cases passed. Runtime: 2
ms Your runtime beats 44.10% of javasubmissions.
【补充】
上面的解法是每次只需移动1位,这种解法是每第 i 次循环移动 i 位:
public int reverseBits(int n) { int ans = 0; for (int i = 0; i < 32; i++) ans |= ((n >> i) & 1) << (31 - i); return ans; }600 / 600 test
cases passed. Runtime: 2 ms Your runtime beats 44.10% of javasubmissions.
相关文章推荐
- appserv 配置ahssl
- 第9章 死锁应对之哲学原理
- Linux进程含义知多少
- Android 如何从一个APP中打开另外一个APP
- 第9周项目3—人数不定的工资类
- 避坑宝典:如何选择HTML5游戏引擎
- 第十一周阅读程序5.2
- QQ付费群规则调整 可以退钱了
- (二)Hibernate4 CRUD 体验
- ModelState.IsValid总为false原因
- 如何根据对象的属性,对集合(list / set)中的对象进行排序
- 如何在iPhone应用上跳转到在AppStore上的评论页面
- linux操作系统和应用系统设计
- 下面forward和redirect的描述,正确的是(ABCD)
- Vijos 1316-明明的随机数【模拟】
- 飛飛(四十)(补)文件的应用
- springMVC中的中心控制Servlet是那个类?(B)
- 《java入门第一季》之Arrays类前传(排序问题)
- HYSBZ 2565 最长双回文串 (回文树)
- 《java入门第一季》之Arrays类前传(排序问题)