当前位置:首页 > PHP

php实现顺子

2026-01-29 16:55:18PHP

判断顺子的实现方法

在PHP中判断一组数字是否为顺子(连续序列),可以通过以下方法实现。假设输入是一个包含5个数字的数组(如扑克牌中的顺子判断场景):

方法一:排序后检查连续性

将数组排序后检查相邻数字的差值是否为1,允许处理包含重复或特殊值(如0代表癞子)的情况。

function isStraight($nums) {
    sort($nums);
    $zeroCount = 0; // 统计0(癞子)的数量
    $gap = 0;

    for ($i = 0; $i < count($nums) - 1; $i++) {
        if ($nums[$i] == 0) {
            $zeroCount++;
            continue;
        }
        if ($nums[$i] == $nums[$i+1]) {
            return false; // 有非0重复牌,不可能是顺子
        }
        $gap += $nums[$i+1] - $nums[$i] - 1; // 计算相邻牌间的空缺
    }

    return $gap <= $zeroCount; // 空缺能被癞子填补
}

方法二:极差判断法

通过计算非零数字的最大最小值差来判断,需排除重复数字。

function isStraight($nums) {
    $min = 14; $max = 0;
    $set = [];

    foreach ($nums as $num) {
        if ($num == 0) continue;
        if (in_array($num, $set)) return false;
        $min = min($min, $num);
        $max = max($max, $num);
        $set[] = $num;
    }

    return $max - $min < 5; // 极差小于5才可能组成顺子
}

使用示例

$hand1 = [1, 2, 3, 4, 5]; // 真顺子
$hand2 = [0, 0, 3, 4, 5]; // 双癞子可补1-2
$hand3 = [1, 2, 2, 4, 5]; // 重复牌

var_dump(isStraight($hand1)); // true
var_dump(isStraight($hand2)); // true
var_dump(isStraight($hand3)); // false

注意事项

  • 扑克牌场景中,A-2-3-4-5是特殊顺子(最小顺子),需要单独处理
  • 算法时间复杂度均为O(n),方法二空间复杂度略高因需存储集合
  • 实际应用中可根据输入特点选择实现方式

php实现顺子

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

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…