当前位置:首页 > PHP

php实现顺子

2026-02-28 14:09:37PHP

检查顺子的基本逻辑

顺子在扑克中指的是连续的五张牌,例如3、4、5、6、7。在PHP中可以通过以下方式验证一组数字是否为顺子:

php实现顺子

function isStraight($nums) {
    // 过滤掉0(假设0代表癞子或万能牌)
    $filtered = array_filter($nums, function($num) {
        return $num != 0;
    });

    // 检查是否有重复的非0牌
    if (count($filtered) != count(array_unique($filtered))) {
        return false;
    }

    // 计算最大值和最小值的差
    $max = max($filtered);
    $min = min($filtered);

    // 差值应小于5(考虑癞子填充)
    return ($max - $min) < 5;
}

处理带癞子的顺子

如果牌组中包含0(代表癞子),需要特殊处理。癞子可以替代任何牌来组成顺子:

php实现顺子

function isStraightWithWildcard($nums) {
    sort($nums);
    $wildcards = 0;

    for ($i = 0; $i < count($nums) - 1; $i++) {
        if ($nums[$i] == 0) {
            $wildcards++;
            continue;
        }

        $gap = $nums[$i + 1] - $nums[$i] - 1;
        if ($gap < 0) { // 有重复牌
            return false;
        }
        $wildcards -= $gap;
    }

    return $wildcards >= 0;
}

测试用例验证

编写测试用例验证函数的正确性:

$testCases = [
    [1, 2, 3, 4, 5],  // true
    [0, 0, 1, 2, 3],  // true
    [1, 2, 3, 4, 6],  // false
    [0, 1, 2, 4, 5],  // true
    [0, 0, 0, 0, 1],  // false
];

foreach ($testCases as $case) {
    echo implode(',', $case) . ': ' . 
        (isStraight($case) ? 'true' : 'false') . "\n";
}

性能优化考虑

对于大型数据集,可以考虑以下优化:

  • 提前终止循环:当发现重复牌时立即返回false
  • 减少排序操作:使用线性扫描替代完整排序
  • 位运算检查:使用位掩码快速检测重复牌
function isStraightOptimized($nums) {
    $min = 14; $max = 0;
    $seen = 0;

    foreach ($nums as $num) {
        if ($num == 0) continue;

        if ($seen & (1 << $num)) return false;
        $seen |= (1 << $num);

        $min = min($min, $num);
        $max = max($max, $num);
    }

    return ($max - $min) < 5;
}

标签: 顺子php
分享给朋友:

相关文章

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…