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 | ''' |
