题目
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目示例
解题思路
- 因为大小王可以替换为任何数字,所以0可以重复
- 其他数字不可以重复,因为是顺子
- 顺子的特征就是最大减去最小的小于5(<=4)
难点
- 0可以重复的思考
- 最大值减去最小值的< 5的思路
示例
public class IsStraight {
/**
* 最大减最小,结果小于5 是顺子
* 除去0元素外,不能有重复的其他数据
*
* @param nums
* @return
*/
public boolean isStraight(int[] nums) {
if (Objects.isNull(nums) || nums.length < 5) {
return false;
}
Set<Integer> numSet = new HashSet<>();
int max = 0;
int min = 13;
for (int num : nums) {
if (num == 0) {
continue;
}
if (numSet.contains(num)) {
return false;
}
max = Math.max(max, num);
min = Math.min(min, num);
numSet.add(num);
}
return max - min < 5;
}
}