当前位置:首页 > 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实现搜索功能

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

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现注册

php实现注册

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

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…