201. Bitwise AND of Numbers Range
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.
For example, given the range [5, 7], you should return 4.
题意是要求,把[m, n]中的所有数都AND起来,看最后的结果。当然暴力做就没什么意思了,也肯定会超时。
下面是我自己的做法,Discuss中也有同样的做法. 我的想法是这样的。
- 如果两个数a, b,相差 >= 1,那么[a, b]之间必定有一个数,他的最后(rightmost)一位是0.
- 然后,m和n都右移一位,可以判定倒数第二位是不是0,以此类推。
- 用i来记录右移的位数
- 当m == n的时候,说明m就是所求数字最左边的一部分,需要把右边的0补齐,也就是
m << i
。
|
|
位运算奇妙无穷啊,这里贴几个别人不同的做法:
https://discuss.leetcode.com/topic/12093/my-simple-java-solution-3-lines/2
|
|
https://discuss.leetcode.com/topic/20176/2-line-solution-with-detailed-explanation
|
|