当前位置:首页 > PHP

php实现顺子

2026-01-29 16:55:18PHP

判断顺子的实现方法

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

php实现顺子

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

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

php实现顺子

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实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…