Giả sử chúng ta có một phạm vi [m, n] trong đó 0 <=m <=n <=2147483647. Chúng tôi phải tìm theo từng bit AND của tất cả các số trong phạm vi này, bao gồm cả. Vì vậy, nếu phạm vi là [5, 7], thì kết quả sẽ là 4.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
i:=0
-
trong khi m không phải là n, thì
-
m:=m / 2, n:=n / 2, tăng i lên 1
-
-
trả về m sau khi dịch chuyển sang trái i lần.
Ví dụ (C ++)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
int i = 0;
while(m != n){
m >>= 1;
n >>= 1;
i++;
}
return m << i;
}
};
main(){
Solution ob;
cout << (ob.rangeBitwiseAnd(5,7));
} Đầu vào
5 7
Đầu ra
4