LeetCode刷題實戰201 數字範圍按位與

2021-10-21 05:08:43 字數 1047 閱讀 5897

given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise and of all numbers in this range, inclusive.

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

示例 1: 

輸入: [5,7]

輸出: 4

示例 2:

輸入: [0,1]

輸出: 0

思路一:當乙個數+1時,總會有這麼乙個規律「某一位後的數字,全部被置為相反數」。

舉個例子:

010111 + 1 = 011000,則010111 & 011000 = 010000。那麼,x & (x+1) 後幾位相反數的「與操作」,結果總為0。

所以,當(m,m+1,...n-1,n)進行連續「與操作」時,會按照上述規律被抵消很大一部分,而只剩下n的字首部分,最後只需將n歸位。舉個例子:

m = 5(0101), n = 7 (0111)。不停右移,得到n字首部分為01,最後歸位字首得res=0100=4

class solution 

return n << offset;}}

思路二: 從高位向低位與,利用 n&(n-1)的特性:n & (n - 1) 可以將 n 最右邊的 1 變成 0

class solution 

return n;

}}

好了,今天的文章就到這裡,如果覺得有所收穫,請順手點個在看或者**吧,你們的支援是我最大的動力 。

上期推文:

leetcode1-200題彙總,希望對你有點幫助!

LeetCode刷題實戰1 兩數之和

題目描述 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...