LeetCode201 Bitwise AND of Numbers Range Java 题解
2016-03-31 12:34
387 查看
题目:
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.
解答:
假如说5:101 7:111 连续几个数相与的规律:一,仅仅要是同样的位置的数字不同样最后那个位置的结果一定是0 。二,假设高位不同样,从不同样的那位到最低位都会为0,比如5和7尽管第0位同样可是因为第一位不同样,所以最后结果第0位 和第一位都为0。
假设理解了第二个规律就好办了,假设另个数位数不同样肯定最后结果为0。假设位数同样,从最高位開始寻找,将第一次发现不同样的那一位到最低位都置为0;
代码中,通过不断地右移直到两个数字相等。然后再左移同样的位数。这样做的效果事实上就是将位置不同样的都置为0
代码:
public static int rangeBitwiseAnd(int m, int n) {
int count=0;
while(m!=n)
{
m=m>>>1;
n=n>>>1;
count++;
}
return m<<count;
}
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.
解答:
假如说5:101 7:111 连续几个数相与的规律:一,仅仅要是同样的位置的数字不同样最后那个位置的结果一定是0 。二,假设高位不同样,从不同样的那位到最低位都会为0,比如5和7尽管第0位同样可是因为第一位不同样,所以最后结果第0位 和第一位都为0。
假设理解了第二个规律就好办了,假设另个数位数不同样肯定最后结果为0。假设位数同样,从最高位開始寻找,将第一次发现不同样的那一位到最低位都置为0;
代码中,通过不断地右移直到两个数字相等。然后再左移同样的位数。这样做的效果事实上就是将位置不同样的都置为0
代码:
public static int rangeBitwiseAnd(int m, int n) {
int count=0;
while(m!=n)
{
m=m>>>1;
n=n>>>1;
count++;
}
return m<<count;
}
相关文章推荐
- Spring+cxf 开发WebService
- JAVA中访问权限修饰符的妙用(单例模式)
- Java开发之单例设计模式
- idea在处理spring国际化解决中文乱码,properties的格式:native-to-ascii
- java基础-008
- Java开发之main方法详解
- Java 图灵机器人 自动回复
- Java开发之static关键字
- 如何在命令行中运行java程序
- Java 集合类详解
- Eclipse安装应知应会
- Java内存模型总结
- Spring框架:Spring容器具体解释
- java 中 Thread.sleep方法的含义
- java.sql.Exception:setString 只能处理少于 32766 个字符的字符串
- Java并发:ThreadLocal详解
- Eclipse:打包时出现Conversion to Dalvik format failed with error 1
- Java 实现导出excel表 POI
- maven强制更新 eclipse 操作
- Spring中多配置文件及引用其他bean的方式