leetcode刷題筆記 二百零一題 數字範圍按位與
阿新 • • 發佈:2020-09-21
leetcode刷題筆記 二百零一題 數字範圍按位與
源地址:201. 數字範圍按位與
問題描述:
給定範圍 [m, n],其中 0 <= m <= n <= 2147483647,返回此範圍內所有數字的按位與(包含 m, n 兩端點)。
示例 1:
輸入: [5,7]
輸出: 4
示例 2:輸入: [0,1]
輸出: 0
//因為是對區間內所有數字進行與操作, 一旦出現對應位置不相同,在區間內所有數求與的過程中肯定為0 //按照這個思路,就將問題轉化為最長公共二進位制字首 object Solution { def rangeBitwiseAnd(m: Int, n: Int): Int = { var count = 0 var num1 = m var num2 = n while (num1 < num2){ num1 = num1 >>> 1 num2 = num2 >>> 1 count += 1 } return num1 << count } } //也可以借用之前的技巧 n & n-1 去除最右邊的1 //有題目條件易知, m <= n //通過不斷對大數不斷去除右邊1,達到和m 01位置一致,實現最長公共二進位制字首 object Solution { def rangeBitwiseAnd(m: Int, n: Int): Int = { var count = 0 var num1 = m var num2 = n while (num1 < num2){ num2 = num2 & (num2-1) } return num2 } }