zoukankan      html  css  js  c++  java
  • leetcode201

    1 class Solution:
    2     def rangeBitwiseAnd(self, m: int, n: int) -> int:
    3         while n > m:
    4             n &= (n-1)
    5         return n

    算法思路:位运算。

    “按位与”操作有一个特点,就是 n & (n-1),是将n的最低的一位二进制1变成0。

    例如:

    10:1010

    9:1001

    10 & 9 = 1000 -> 8

    注意这是最低位的1变成0,而不是 n - 2。

    例如:

    100 &  99 = 96 而不是98。但是“按位与”的结果必定是小于 n的。

    根据“按位与”的这个特点,可以知道在闭区间[m,n]上,本题实际上是计算:

    n将最低位的1变成0,如果还大于m,则继续将最低位1变成0,一直到比m小,则为所求答案。

  • 相关阅读:
    OSCache报错error while trying to flush writer
    html 输入框验证
    Struts2 一张图片引发的bug
    Html 小插件10 即时新闻
    String
    内部类
    多态
    抽象&接口
    继承
    封装
  • 原文地址:https://www.cnblogs.com/asenyang/p/12602831.html
Copyright © 2011-2022 走看看