LeetCode 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.
1 class Solution { 2 public: 3 int rangeBitwiseAnd(int m, int n) { 4 int res = 0; 5 6 for (int i=0; i<32 && (n!= 0 && m != 0); i++) { 7 res = res | (bitvalue(m, n) << i); 8 m>>=1; 9 n>>=1; 10 } 11 return res; 12 } 13 14 int bitvalue(int m, int n) { 15 if (n - m > 0) { 16 return 0; 17 } 18 if (n == m && (n&0x1 == 1)) { 19 return 1; 20 } 21 return 0; 22 } 23 };
都忘了自己第一次是怎么想出来的了,看了discuss的一种解法:
class Solution { public: int rangeBitwiseAnd(int m, int n) { int x = m^n; int cnt = 0; while (x) { cnt++; x>>=1; } return (m & n) & ~((1<<cnt) - 1); } };
简单很多