LeetCode 201 數字範圍按位與

2021-10-24 05:31:09 字數 871 閱讀 1974

給定範圍 [m, n],其中 0 <= m <= n <= 2147483647,返回此範圍內所有數字的按位與(包含 m, n 兩端點)。

示例 1: 

輸入: [5,7]

輸出: 4

示例 2:

輸入: [0,1]

輸出: 0

1. 直接比較起始端點和終止端點的公共長度

2. 因為公共的部分才可以保證相與之後不變化,非公共部分相與之後一定為0,因為之所以是非公共部分就說明不同,而二進位制中只有0和1,因此說明非公共部分的每一位既出現了0也出現了1,則相與一定為0

class solution 

while(n)

while(bitm.size() < bitn.size())

bitm += '0';

reverse(bitm.begin(), bitm.end());

reverse(bitn.begin(), bitn.end());

vectorans;

for (int i = 0; i < bitm.size(); ++i)else

}for (int i = ans.size(); i < bitn.size(); ++i)

reverse(ans.begin(), ans.end());

int res = 0;

for (int i = 0; i < ans.size(); ++i)

return res;

}};

class solution 

return m << t;

}};

leetcode 201 數字範圍按位與

顯然,暴力解決方法是從m開始直到n求按位與,但很明顯這太慢了,雖然時間複雜度是o n 但顯然不是乙個好的解法 我們可以注意到這樣一點,在數字加1的時候,最低位肯定會從0變成1,或者從1變成0,不管哪樣,兩個數的最低位中勢必有乙個0,而一旦出現了乙個0,這一位上的按位與結果將永遠為0 假如在m n的增...

leetcode201 數字範圍按位與

給定範圍 m,n 其中 0 m n 2147483647,返回此範圍內所有數字的按位與 包含 m,n 兩端點 示例 1 輸入 5 7 輸出 4示例 2 輸入 0 1 輸出 0首先,如果m 0,則範圍內按位與的結果必定是0 如果m n 則表示範圍內只有乙個數字,結果必定是m 假設 m 5,n 7 首先...

leetcode 201 數字範圍按位與

記一次失敗的解題經歷,想跑捷徑,最後發現還是最初的起點比較快 題目如下 201.數字範圍按位與 難度中等112收藏分享切換為英文關注反饋 給定範圍 m,n 其中 0 m n 2147483647,返回此範圍內所有數字的按位與 包含 m,n 兩端點 示例 1 輸入 5,7 輸出 4示例 2 輸入 0,...