C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解

在线提交: https://leetcode.com/problems/bitwise-and-of-numbers-range/

题目描述


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

示例 1:

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

示例 2:

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

  • 题目难度:Medium

  • 通过次数:139

  • 提交次数:449

  • 贡献者:amrsaqr

  • 相关话题 位运算


思路:
两个数按位与的结果为相同的部分保持不变,不相同的部分会被置为零,多个数的按位与的结果与之类似。
根据按位与的性质可知,如果数字m != n,则在m, n范围内的数的最后一位必然同时存在1和0,因此最后一位的按位与&的结果必为0。而如果m=0,所有数按位与的结果必然为0。

举例而言:

例1. [9, 11],其范围内的数字的二进制表示依次为:

1 001

1 010

1 011

这些数按位相与后的结果为1 000。

例2.[20, 23],其范围内的数字的二进制表示依次为:

101 00

101 11

这些数按位相与后的结果为101 00。

例3.[4, 23],其范围内的数字的二进制表示依次为:

00100

10111

这些数按位相与后的结果为00000,因为高位没有共同字符串。

因此,m,n范围内的数的按位与的结果就是各个数的各位对齐后高位共同数字串末尾全补0的值。

已AC代码:

public class Solution
{public int RangeBitwiseAnd(int m, int n){// 题中规定数据范围: m, n中较大值<=31s = 2147483647int shiftCount = 0;int common = 0;GetCommonDigits(m, n, ref common, ref shiftCount);var res = common << shiftCount;  // 末位补0return res;}public void GetCommonDigits(int a, int b, ref int common, ref int shiftCount){shiftCount = 0;while (a != b){a = a >> 1;b = b >> 1;shiftCount++;}common = a;}
}

当然也可使用递归解法:

public static int RangeBitwiseAnd(int m, int n)
{if (m < n)return (RangeBitwiseAnd(m >> 1, n >> 1) << 1);else return m;
}

Rank:

You are here! Your runtime beats 96.88% of csharp submissions.

Refrence:
https://leetcode.com/problems/bitwise-and-of-numbers-range/discuss/56789/C-Solution-with-bit-shifting-(Beats-90)

转载于:https://www.cnblogs.com/enjoy233/p/10408703.html

C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解相关推荐

  1. Leetcode 201. 数字范围按位与 解题思路及C++实现

    方法一: 解题思路: 这道题目,其实就是寻找m和n的32位二进制数中,前面的公共部分,然后后面的用0来补齐.因为后面的位中,必然存在某一个数k,m<= k <= n,而k的32位二进制数在 ...

  2. LeetCode 201. 数字范围按位与

    思路: 暴力会超时! 引用大佬的思路: [笔记]当一个数+1时,总会有这么一个规律"某一位后的数字,全部被置为相反数".举个例子: 010111 + 1 = 011000,则010 ...

  3. C++算法学习(力扣:201. 数字范围按位与)

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...

  4. C#版 - Leetcode 306. 累加数 - 题解

    C#版 - Leetcode 306. 累加数 - 题解 306.Additive Number 在线提交: https://www.gaimor.cn 累加数是一个字符串,组成它的数字可以形成累加序 ...

  5. PHP版Leetcode题解开始随缘更新

    2019独角兽企业重金招聘Python工程师标准>>> PHP版Leetcode题解 我叫skys215,是一名bug工程师. 我接触编程的时间比较早,但是因为我数学不好加上比较懒, ...

  6. leetcode201. 数字范围按位与

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...

  7. Leetcode201. Bitwise AND of Numbers Range数字范围按位与

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...

  8. 核心解读 - 2022版智慧城市数字孪生标准化白皮书

    核心解读 - 2022版智慧城市数字孪生标准化白皮书 前言:城市数字孪生基本概念 一.城市数字孪生概述 1.城市数字孪生内涵及概念模型 2.城市数字孪生典型特征 3.城市数字孪生相关方 4.城市数字孪 ...

  9. Pixologic ZBrush 2019 中文特别版 Mac 三维数字雕刻软件

    ZBrush为数字雕塑树立行业标杆. 强大功能使您能够在提供即时反馈的实时环境下,使用可定制笔刷系统完成虚拟黏土形状.纹理和绘制.在使用 ZBrush 时,您将获得与世界各地电影工作室.游戏开发人员. ...

最新文章

  1. qinyu.blog.51cto.com里的好文章,比尔盖茨
  2. 分布式架构:并发重复请求和幂等场景技术实现总结
  3. MTK平台 Android4.0.3 定制关机动画
  4. Replica Sets+Sharding方案之真枪实弹篇
  5. 全面工作总结的写作技巧和写作要点
  6. 信息系统项目管理师论文考试汇总(2010~2021年)
  7. nbiot模块WH-NB73 UDP透传和透传云使用说明
  8. 山寨版 颈椎病治疗秘籍
  9. 苹果录屏功能没有声音_其实苹果手机也有录屏功能!简单操作几步,就能轻松开启...
  10. 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
  11. 【AI视野·今日CV 计算机视觉论文速览 第212期】Thu, 3 Jun 2021
  12. springboot+前端实现文件(图片)上传到指定目录
  13. java使用jxl包读写excel表格文件,即xls格式文件
  14. linux内核教学的全套视频,中科大Linux内核分析视频教程下载,共计23集
  15. 【Java 8 新特性】Java Map compute() 示例 | 指定 key 的值进行计算后替换
  16. 整体大于部分_整体叶盘球头鼓锥形铣刀五轴加工技术
  17. SQL考点之存储过程、存储函数、游标
  18. Scene Graph(视觉关系场景图检测)
  19. 爱因斯坦广义相对论:引力是时空的曲率
  20. 在access中记录的末尾标志是什么_access习题--报表和页

热门文章

  1. 函数 注释规范_C++掌握标准编码规范,摘掉初级“码农”帽子!
  2. [Java] 蓝桥杯PREV-33 历届试题 兰顿蚂蚁
  3. 第七届 蓝桥杯 省赛 第八题 四平方和
  4. 【操作系统】进程的异步性
  5. 【Linux】shell调用Java程序main方法通过crontab定时执行
  6. HBase模式设计之ID顺序增长(rowkey顺序增长)
  7. shell脚本报错问题: -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory
  8. Oracle job自动任务实用指南
  9. kendo实现grid的inline编辑
  10. Android颜色选择器库