> 文档中心 > 【力扣题解】868. 二进制间距

【力扣题解】868. 二进制间距


😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈

文章目录

    • 一、题目
      • 1、题目描述
      • 2、基础框架
      • 3、原题链接
    • 二、解题报告
      • 1、思路分析
      • 2、代码详解
    • 三、本题知识

一、题目

1、题目描述

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。

如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。

2、基础框架

  • Java版本框架代码如下:
class Solution {    public int binaryGap(int n) { }}

3、原题链接

868. 二进制间距

二、解题报告

1、思路分析

       (1)先用异或运算计算出当n转化为二进制后,第i + 1位上的数为0还是1。然后计算两个相邻1之间的最大距离。

2、代码详解

class Solution {    public int binaryGap(int n) { int[] num = new int[32]; int left  = -1; int ans = 0; for(int i = 0;i < 32;i++) {     if((n & 1<<i) > 0) {  num[i]++;     }      } for(int i = 0;i < 32;i++) {     if(num[i] == 1) {  if(left == -1) {      left = i;  }else {      ans = Math.max(ans,i - left);      left = i;  }     }      } return ans;    }}

三、本题知识

位运算

jcg路由器知识网