Appearance
61.扑克牌中的顺子
题目
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
思路
判断非大小鬼的最小值和最大值之间的差值是否小于5
排序+遍历
class Solution {
public boolean isStraight(int[] nums) {
Arrays.sort(nums);
int joker = 0;
for(int i = 0; i < 4; i++){
// 如果是大小鬼,+1
if(nums[i] == 0) joker++;
// 如果数值重复,提前返回
else if(nums[i] == nums[i + 1]) return false;
}
// 判断非大小鬼的最小值和最大值之间的差值是否小于5
return nums[4] - nums[joker] < 5;
}
}
Set去重+遍历
class Solution {
public boolean isStraight(int[] nums) {
Set<Integer> set = new HashSet<>();
// 记录最大最小值
int max = 0, min = 14;
for(int i = 0; i < 5; i++){
// 碰到大小鬼,跳过
if(nums[i] == 0) continue;
// 存在重复值,提前返回false
if(set.contains(nums[i])) return false;
// 更新最大最小值
max = Math.max(nums[i], max);
min = Math.min(nums[i], min);
// 将该数加到set中
set.add(nums[i]);
}
// 判断非大小鬼的最小值和最大值之间的差值是否小于5
return max - min < 5;
}
}