สมมติว่าเรามีช่วง [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