69.扑克牌的顺子

从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。
2∼10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,大小王可以看做任意数字。

为了方便,大小王均以 0 来表示,并且假设这副牌中大小王均有两张。

注意,有可能手里没有拿任何牌。

样例1:

输入:[8,9,10,11,12]
输出:true

样例2:

输入:[0,8,9,11,12]
输出:true

代码:

class Solution {
    public boolean isContinuous(int [] numbers) {
        //边界条件检查:数组不能为null且长度必须为5
        if(numbers == null||numbers.length!=5)return false;
        //将数组排序方便后续处理
        Arrays.sort(numbers);
        //cnt为大小王(0)的数量
        //gap为非零数字之间的间隔总数
        int cnt = 0, gap = 0;
        //统计大小王的数量
        for(int i = 0;i<5;i++)if(numbers[i]==0)cnt++;
        //检查非零数字是否有重复,并计算间隔
        for(int i = cnt;i<4;i++){
            //如果有重复的非零数字,直接返回false
            if(numbers[i]==numbers[i+1])return false;
            //计算相邻两个非零数字之间的间隔
            gap+=numbers[i+1]-numbers[i]-1;
        }
        //判断大小王的数量是否足够填补所有间隔
        return cnt>=gap;
    }
}
posted @ 2025-06-02 09:25  回忆、少年  阅读(63)  评论(0)    收藏  举报