返回

别再苦苦挣扎了!用PHP轻松破解Leetcode的868题:Binary Gap

见解分享

使用 PHP 巧解 LeetCode 868:找出二进制中 1 之间的最大间距

概述

LeetCode 868 题要求我们计算给定数字的二进制表示中相邻两个 1 之间的最长距离。为了解决这个问题,我们需要将数字转换为二进制,然后遍历二进制表示,遇到 1 时更新最大距离。

PHP 代码

<?php
/**
 * 计算数字二进制表示中相邻两个 1 之间的最长距离
 *
 * @param int $n 要计算的数字
 *
 * @return int 最大距离
 */
function binaryGap($n)
{
    // 将数字转换为二进制
    $binary = decbin($n);

    // 初始化最大距离
    $maxGap = 0;

    // 上一个 1 的位置
    $prev = -1;

    // 遍历二进制表示
    for ($i = 0; $i < strlen($binary); $i++) {
        // 如果当前位是 1
        if ($binary[$i] === '1') {
            // 如果这是第一个 1,更新最大距离为 0
            if ($prev === -1) {
                $maxGap = 0;
            } else {
                // 更新最大距离为当前位置与上一个 1 位置的差
                $maxGap = max($maxGap, $i - $prev);
            }
            // 更新上一个 1 的位置
            $prev = $i;
        }
    }

    // 返回最大距离
    return $maxGap;
}

// 示例输入
$n = 22;

// 调用 binaryGap 函数并打印结果
$result = binaryGap($n);
echo "二进制间距:{$result}";
?>

代码详解

  • 将给定数字转换为二进制。
  • 初始化 maxGap 变量存储最大距离和 prev 变量存储上一个 1 的位置。
  • 遍历二进制表示,遇到 1 时更新最大距离:
    • 如果这是第一个 1,将最大距离设置为 0。
    • 否则,将最大距离更新为当前位置与上一个 1 位置的差。
  • 返回最大距离。

示例

给定数字 n = 22,其二进制表示为 10110,其中相邻两个 1 之间的最长距离为 2。因此,调用 binaryGap 函数后,输出结果为 2

结论

掌握了这个技巧,你就能轻松应对 LeetCode 中类似的难题,在编程世界中不断提升自己。快来尝试一下,展示你的 PHP 编程实力吧!

常见问题解答

  1. 为什么我们要将数字转换为二进制?
    为了计算两个 1 之间的距离,我们需要知道数字的二进制表示中 1 的位置。

  2. 为什么我们在遍历二进制表示时要更新 prev 变量?
    prev 变量存储上一个 1 的位置,这样我们才能计算当前 1 与上一个 1 之间的距离。

  3. 如何确定最大距离?
    在遍历二进制表示时,我们比较当前 1 与上一个 1 之间的距离,并保留其中最大的距离。

  4. 你能提供一个更复杂的示例吗?
    给定数字 n = 13,其二进制表示为 1101,其中相邻两个 1 之间的最长距离为 1。

  5. 除了 PHP,还有其他语言可以解决这个问题吗?
    是的,其他语言,如 Python、Java 和 C++,也可以解决这个问题。