Given a range [m, n] where 0 <= m <= n <= 2147483647
, return the bitwise AND of all numbers in this range, inclusive.
For example, given the range [5, 7]
, you should return 4
.算法
给一个范围,返回这个范围中全部的数按位相与最后的结果。this
当m!=n,那么最末位一定等0,由于[m, n]一定包含奇偶数,相与最末位等0。能够将m,n都右移一位,记为mk、 nk,这样就至关于将[m, n]之间的全部的数都右移动了一位,当mk=nk的时候,说明以前[m, n]之间的数右移一位后是相等的,右移后的数做AND操做,结果仍是m(=n),因此操做就能够中止了记录右移的次数,offset,m>>offset即为所求结果spa
算法实现类.net
public class Solution { public int rangeBitwiseAnd(int m, int n) { int offset = 0; while (m != n) { m >>= 1; n >>= 1; offset++; } return m << offset; } }