Skip to content

Commit e4a4604

Browse files
committed
201. Bitwise AND of Numbers Range
1 parent d961888 commit e4a4604

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//https://leetcode.com/problems/bitwise-and-of-numbers-range/
2+
3+
class Solution {
4+
public:
5+
int min(int a, int b){
6+
return a<b?a:b;
7+
}
8+
int rangeBitwiseAnd(int left, int right) {
9+
if(left==0) return 0;
10+
int ans = 0,temp = left, lcnt = 0,rcnt = 0,max_right = -1+pow(2,31);
11+
while(temp){
12+
lcnt++;
13+
temp>>=1;
14+
}
15+
temp = right;
16+
while(temp){
17+
rcnt++;
18+
temp>>=1;
19+
}
20+
if(lcnt!=rcnt) return 0;
21+
else{
22+
if(rcnt==31) max_right = pow(2,31)-1;
23+
else max_right = 1<<rcnt;
24+
for(int i=left; i<=min(right,max_right); i++){
25+
if(i==left) ans = left;
26+
else ans&=i;
27+
if(!ans) break;
28+
if(i==right) break;
29+
}
30+
}
31+
32+
return ans;
33+
}
34+
};

0 commit comments

Comments
 (0)