สมมติว่าเรามีช่วง [m, n] โดยที่ 0 <=m <=n <=2147483647 เราต้องหาค่าบิต AND ของตัวเลขทั้งหมดในช่วงนี้ ดังนั้นหากช่วงคือ [5, 7] ผลลัพธ์จะเป็น 4
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ผม :=0
-
ในขณะที่ m ไม่ใช่ n ดังนั้น
-
m :=m/2, n :=n / 2, เพิ่ม i ขึ้น 1
-
-
กลับ m หลังจากขยับไปทางซ้าย i ครั้ง
ตัวอย่าง(C++)
ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −
#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));
} อินพุต
5 7
ผลลัพธ์
4