• leetcode刷题笔记 二百零一题 数字范围按位与


    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
        }
    }
    
  • 相关阅读:
    点击鼠标获得坐标位置
    广告的字一个一个的显示出来
    纯css实现下拉菜单的效果
    用css3写出的倒三角形
    MySQL(三)
    Navicat之MySQL连接(二)
    MySQL 的安装与使用(一)
    Servlet(二)
    Servlet(一)
    Linux常用命令大全
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13706227.html
Copyright © 2020-2023  润新知