Leetcode#201. Bitwise AND of Numbers Range
Problem
Given two integers left
and right
that represent the range [left, right]
, return the bitwise(位元運算) AND of all numbers in this range, inclusive.
Example 1:
1 | Input: left = 5, right = 7 |
Example 2:
1 | Input: left = 0, right = 0 |
Example 3:
1 | Input: left = 1, right = 2147483647 |
Constraints:
0 <= left <= right <= 2^31 - 1
Solve
對區間的數字進行位元運算
1 | 根據位元的值(0或1)進行邏輯運算 |
不過題目要連續
1 | 101 (5) |
1 | 10101010 (170) |
先說結論、實際看 就是看位元數有沒有一樣
因為連續區間 位元 AND 的結果該位元會是 0。
所以只有長度一樣時,才有
1 | class Solution: |
範例一
當 left = 5
、right = 7
時
1 | scssCopy code |
迴圈開始,每次右移 left
和 right
一位,同時增加 shift
的值。
第一次迴圈:
1 | scssCopy code |
第二次迴圈:
1 | scssCopy code |
迴圈結束,因為此時 left
等於 **right
**。
最後,將 left
左移 shift
位:
1 | scssCopy code |
所以,在區間 [5, 7]
內的所有數字的位元 AND 運算結果為 **4
**。
這個方法通過右移邊界來逐漸縮小區間的範圍,同時使用 shift
變數跟踪右移的位元數。最後,將左邊界左移回來,得到位元 AND 運算的結果。
範例二
假設 **left = 3
、right = 8
**。
1 | scssCopy code |
迴圈開始,每次右移 left
和 right
一位,同時增加 shift
的值。
第一次迴圈:
1 | scssCopy code |
第二次迴圈:
1 | scssCopy code |
迴圈結束,因為此時 left
等於 **right
**。
最後,將 left
左移 shift
位:
1 | scssCopy code |
所以,在區間 [3, 8]
內的所有數字的位元 AND 運算結果為 **0
**。
這個方法通過右移邊界來逐漸縮小區間的範圍,同時使用 shift
變數跟踪右移的位元數。最後,將左邊界左移回來,得到位元 AND 運算的結果。
注意:該程式碼的目的是求解區間內所有數字的位元 AND 運算結果,而不是計算 left
和 right
的位元 AND 運算結果。因此,當區間內的數字差異較大時,位元 AND 運算的結果可能為 0。
範例三
假設 **left = 3
、right = 9
**。
1 | scssCopy code |
迴圈開始,每次右移 left
和 right
一位,同時增加 shift
的值。
第一次迴圈:
1 | scssCopy code |
第二次迴圈:
1 | scssCopy code |
迴圈結束,因為此時 left
等於 **right
**。
最後,將 left
左移 shift
位:
1 | scssCopy code |
所以,在區間 [3, 9]
內的所有數字的位元 AND 運算結果為 **0
**。
這個方法通過右移邊界來逐漸縮小區間的範圍,同時使用 shift
變數跟踪右移的位元數。最後,將左邊界左移回來,得到位元 AND 運算的結果。
注意:該程式碼的目的是求解區間內所有數字的位元 AND 運算結果,而不是計算 left
和 right
的位元 AND 運算結果。因此,當區間內的數字差異較大時,位元 AND 運算的結果可能為 0。
偷吃步
1 | ''' |