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