leetcode [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.
Example 1:
Input: [5,7] Output: 4
Example 2:
Input: [0,1] Output: 0
题目大意:
返回[m,n]这个范围内所有数字&的结果。
解法:
我先是直接将这个范围的数字进行&操作,得到最后结果,但是这种做法超时了。
java:
class Solution { public int rangeBitwiseAnd(int m, int n) { int res=m; for(int i=m+1;i<=n;i++){ res&=i; } return res; } }
看了看网上的解法,在[m,n]这个范围内,只要存在一个数字,在一位上是0,那么最后&的结果上这一位也是0。
解法的思路如下:
1.当m!=n的时候,那么m与n之间一定存在一个奇数和一个偶数,最后那一位&的结果一定是0
2.将m,n都右移一位,使用变量记录最后几位零的个数,继续到1步骤判断
3.将m*lastIndex返回,相当于把最后几位0给补上。
java:
class Solution { public int rangeBitwiseAnd(int m, int n) { if(m==0) return 0; int lastIndex=1; while(m!=n){ m>>=1; n>>=1; lastIndex<<=1; } return m*lastIndex; } }