当前位置:首页 > PHP

php实现顺子

2026-02-28 14:09:37PHP

检查顺子的基本逻辑

顺子在扑克中指的是连续的五张牌,例如3、4、5、6、7。在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(代表癞子),需要特殊处理。癞子可以替代任何牌来组成顺子:

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实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现

php实现

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

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db…