zoukankan      html  css  js  c++  java
  • [Swift]LeetCode201. 数字范围按位与 | Bitwise AND of Numbers Range

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10184197.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

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

    Example 1:

    Input: [5,7]
    Output: 4
    

    Example 2:

    Input: [0,1]
    Output: 0

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。

    示例 1: 

    输入: [5,7]
    输出: 4

    示例 2:

    输入: [0,1]
    输出: 0

    44ms
     1 class Solution {
     2     func topDigit(_ n: Int) -> Int {
     3         var n = n
     4         while (n & (n-1)) != 0 {
     5             n = (n & (n-1))
     6         }
     7         return n
     8     }
     9     func rangeBitwiseAnd(_ m: Int, _ n: Int) -> Int {
    10         guard m > 0 && n > 0 else {
    11             return 0
    12         }
    13         var m2 = topDigit(m)
    14         var n2 = topDigit(n)
    15         
    16         if n2 != m2 {
    17             return 0
    18         }
    19         
    20         return m2 | rangeBitwiseAnd(m-m2, n-m2)
    21     }
    22 }

    48ms

     1 class Solution {
     2     func rangeBitwiseAnd(_ m: Int, _ n: Int) -> Int {
     3         if m == 0 {
     4             return 0
     5         }
     6         
     7         var m = m
     8         var n = n
     9         var factor = 1
    10         
    11         while m != n {
    12             m >>= 1
    13             n >>= 1
    14             factor <<= 1
    15         }
    16         
    17         return m * factor
    18     }
    19 }

    52ms

     1 class Solution {
     2     func rangeBitwiseAnd(_ m: Int, _ n: Int) -> Int {
     3         /*
     4         0  - 0000
     5         1  - 0001
     6         2  - 0010
     7         3  - 0011
     8         4  - 0100
     9         5  - 0101
    10         6  - 0110
    11         7  - 0111
    12         8  - 1000
    13         9  - 1001
    14         10 - 1010
    15         
    16         8..10  =>  1000
    17         */
    18 
    19         var m = m
    20         var n = n
    21         var i = 0
    22         while m != n {
    23             m >>= 1
    24             n >>= 1
    25             i += 1
    26         }
    27         return m << i
    28     }
    29 }

    52ms

    1 class Solution {
    2     func rangeBitwiseAnd(_ m: Int, _ n: Int) -> Int {
    3         return (n > m) ? (rangeBitwiseAnd(m / 2, n / 2) << 1) : m
    4 
    5     }
    6 }

    56ms

     1 class Solution {
     2     func rangeBitwiseAnd(_ m: Int, _ n: Int) -> Int {
     3         var plus = 1
     4         var result = m & n
     5         while m + plus < n {
     6             result &= m + plus
     7             plus += plus
     8         }
     9         return result
    10     }
    11 }

    64ms

     1 class Solution {
     2     func rangeBitwiseAnd(_ m: Int, _ n: Int) -> Int {
     3         // 101011101
     4         // 101111001
     5         
     6         var m = m
     7         var n = n
     8         var res = 0
     9         var t = 1
    10         for i in 0..<31 {
    11             if m % 2 == 0 || n % 2 == 0 || m < n {
    12                 m = m >> 1
    13                 n = n >> 1
    14             } else {
    15                 res += t
    16                 m = m >> 1
    17                 n = n >> 1
    18             }
    19             
    20             t *= 2
    21         }
    22         
    23         return res
    24     }
    25 }
  • 相关阅读:
    5773. 【NOIP2008模拟】简单数学题
    jzoj_5455. 【NOIP2017提高A组冲刺11.6】拆网线
    5461. 【NOIP2017提高A组冲刺11.8】购物
    博客第三天
    博客第二天
    博客的第一天。
    微服务架构下的session一致性
    分布式数据库数据一致性的原理、与技术实现方案
    epoll的本质
    DNS域名解析过程
  • 原文地址:https://www.cnblogs.com/strengthen/p/10184197.html
Copyright © 2011-2022 走看看