1. 题目
2. 题解
是顺子是充分条件为:
- 除大小王外,所有牌 无重复 ;
- 设此 5 张牌中最大的牌为 max ,最小的牌为 min (大小王除外),则需满足:max - min < 5
(1)set判重
class Solution {
/*
除大小王外,所有牌 无重复 ;
设此 5 张牌中最大的牌为 max ,最小的牌为 min (大小王除外),则需满足:max - min < 5
*/
public boolean isStraight(int[] nums) {
Set<Integer> set = new HashSet<>();
int max = 0, min = Integer.MAX_VALUE;
for (int num : nums) {
//遇见大小王
if (num == 0)
continue;
//顺子中不能有重复值
if (!set.add(num)) {
return false;
}
//求最大,最小值
max = Math.max(max, num);
min = Math.min(min, num);
}
return max - min < 5;
}
}
(2)排序 + 遍历
class Solution {
/*
除大小王外,所有牌 无重复 ;
设此 5 张牌中最大的牌为 max ,最小的牌为 min (大小王除外),则需满足:max - min < 5
*/
public boolean isStraight(int[] nums) {
int joker = 0;
Arrays.sort(nums); // 数组排序
for (int i = 0; i < 4; i++) {
// 统计大小王数量
if (nums[i] == 0)
joker++;
// 若有重复,提前返回 false
else if (nums[i] == nums[i + 1])
return false;
}
return nums[4] - nums[joker] < 5; // 最大牌 - 最小牌(除去大小王就是最小牌) < 5 则可构成顺子
}
}