Skip to content

Latest commit

 

History

History
63 lines (48 loc) · 1.63 KB

200.md

File metadata and controls

63 lines (48 loc) · 1.63 KB

✏️Leetcode之PHP版题目解析(201. Bitwise AND of Numbers Range)

2019-10-15 吴亲库里 库里的深夜食堂


✏️描述

这道题求[m,n]区间的按位与运算。


✏️题目实例

✏️题目分析

首先,0 和任何数相与都是0。也正是demo2的结果。那就看看几个demo。

给定[5,7]
5的二进制101
6的二进制110
7的二进制111
最终相与的结果就是100 转换为十进制即4


[20,23]
20     10100
21     10101
22     10110
23     10111
结果    10100   = 20

你可以看出这样的运算最后的结果就是求二进制左边公共的部分。如果不相等,使二进制的末位加1, 二进制进一位,只要进位说明末尾有0的存在,不断右移两个数进行比较,等到相等的时候,说明当前两个数最高位已经没有变化了,记录下位移的次数,左移相同位数即可。

 /**
     * @param Integer $m
     * @param Integer $n
     * @return Integer
     */
    function rangeBitwiseAnd($m, $n) {
       $count=0;
        while($m !=$n){
            $m>>=1;
            $n>>=1;
            $count++;
        }
        $n<<=$count;
        return $n;
    }   

联系