作者:Aero-Maxwell | 来源:互联网 | 2024-12-10 13:32
在扑克游戏中,判断手中的一组牌是否构成连续的序列(即顺子)是一个常见的问题。本文将探讨如何使用Java编程语言解决这个问题。
解题方法
为了确定一组扑克牌是否能组成一个顺子,我们可以通过以下步骤实现:
- 初始化一个长度为14的数组d,用于记录每个数字出现的次数。这里14是因为扑克牌中的最大数为13(K),而数组索引从0开始,同时考虑到可能存在的大小王(用0表示)。
- 设置两个变量max和min分别用于记录数组中非零元素的最大值和最小值。初始时,max设为-1,min设为14。
- 遍历给定的数组numbers,对于每个元素:
- 如果元素为0(代表大小王),则跳过当前循环。
- 更新该元素在数组d中的计数。如果某个非零元素出现了两次,则直接返回false,因为这意味着存在重复的数字,无法形成顺子。
- 根据当前元素更新max和min的值。
- 最后,检查max和min之间的差值是否小于等于4。如果是,则说明这组牌可以构成一个顺子;否则,不能构成顺子。
以下是具体的Java代码实现:
public class PokerSolution { /* max 记录最大值 min 记录除0以外的最小值 满足条件:1. max - min <= 4 2. 除0外没有重复的数字 */ public boolean isContinuous(int[] cards) { int[] count = new int[14]; int max = -1; int min = 14; // 考虑到最多有4个0,这里预先设置 count[0] = -4; for (int card : cards) { if (card == 0) continue; // 跳过大小王 count[card]++; if (count[card] > 1) return false; // 存在重复数字 if (card > max) max = card; // 更新最大值 if (card