61_剑指offer_java_扑克牌顺子

本文介绍了一种判断五张扑克牌是否构成顺子的算法。通过数组排序、统计0(大小王)数量及非零数字间的空缺,实现顺子的智能识别。适用于功能测试与特殊输入情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目描述

测试用例

题目考点

解题思路

参考解题


题目描述

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

测试用例

  • 功能测试(抽出的牌中有一个或者多个大、小王;抽出的牌中没有大、小王;抽出牌有对子)
  • 特殊输入测试(输入空指针)

题目考点

考察应聘者的抽象建模能力。

解题思路

  1. 数组排序
  2. 统计数组中0的个数
  3. 统计排序之后的数组中相邻数字之间的空缺总数
  4. 比较0的个数和空缺总数

参考解题

空缺的个数和单纯的数差之间相差一个1,这个细节卡了我一会儿,🤺

import java.util.Arrays;

public class Solution {
    // 扑克牌顺子
    
    public boolean isContinuous(int [] numbers) {
        // 异常
        if(numbers == null || numbers.length < 1){
            return false;
        }
        
        // 1、数组排序
        Arrays.sort(numbers);
        
        // 2、统计0个数
        int zeroCount = 0;
        for(int i = 0 ; i < numbers.length ; ++i){
            if(numbers[i] == 0){
                 zeroCount++;
            }else{
                continue;
            }
        }
        
        // 3、统计排序后数组相邻f非零数字之间的空缺总数
        int lackCount = 0;
       
        for(int i = zeroCount; i < numbers.length -1;++i ){
            // 第一个非零数num[zreoCount]
            if(numbers[i+1] - numbers[i] == 0) {
                return false;
            }else if(numbers[i+1] - numbers[i]  == 1){
                continue;
            }else{
                lackCount += numbers[i+1] - numbers[i] - 1;
            }
        }
        
        // 4、比较0的个数和空缺总数
        if(lackCount   > zeroCount){
            return false;
        }
        return true;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值