判断是否为顺子

2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14

go

func isStraight(nums []int) bool {
    if len(nums) < 5 {
        return false // 数组长度小于5,不能构成顺子
    }
    sort.Ints(nums)
    var jokerCount int
    for i, num := range nums {
        if num == 0 {
            jokerCount++ // 计数0值
            continue
        }
        // 排除0后,检查是否有重复的数字
        if i > 0 && nums[i] == nums[i-1] {
            return false
        }
    }
    
    // 检查排除0后的数组长度和最后一个与第一个数字的差值
    validCount := len(nums) - jokerCount
    if validCount == 5 {
        // 只有当排除0后剩下5个有效数字时,才检查顺子条件
        return nums[4-jokerCount] - nums[0] < 5
    }
    return false
}

php

function isStraight($nums) {
    if (count($nums) < 5) {
        return false; // 数组长度小于5,不能构成顺子
    }
    sort($nums);
    $jokerCount = 0;
    for ($i = 0; $i < count($nums); $i++) {
        if ($nums[$i] === 0) {
            $jokerCount++; // 计数0值
            continue;
        }
        // 排除0后,检查是否有重复的数字
        if ($i > 0 && $nums[$i] === $nums[$i - 1]) {
            return false;
        }
    }

    $validCount = count($nums) - $jokerCount;
    if ($validCount === 5) {
        // 只有当排除0后剩下5个有效数字时,才检查顺子条件
        return $nums[count($nums) - 1 - $jokerCount] - $nums[$jokerCount] < 5;
    }
    return false;
}
posted @ 2024-08-20 15:46  朝阳1  阅读(12)  评论(0编辑  收藏  举报