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.

For example, given the range [5, 7], you should return 4.

思路:介于(包括)m,n之间的所有数字位相与,结果就是m,n的二进制最左边共同的部分。
逐步右移m,n,如果移位后相等,那么再往回左移相应的位数,就是m,n最左边相等的部分。
递归
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public int rangeBitwiseAnd(int m, int n) {  
  2.     if (n == m) return n;  
  3.     return rangeBitwiseAnd(m >> 1, n >> 1) << 1;  
  4. }  

迭代:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public int rangeBitwiseAnd(int m, int n) {  
  2.     int count = 0;  
  3.     while (m != n) {  
  4.         m >>= 1;  
  5.         n >>= 1;  
  6.         count++;  
  7.     }  
  8.     return (m << count);  
  9. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值