从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
set
class Solution { public boolean isStraight(int[] nums) { //set Set<Integer> set = new HashSet<>(); int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE; for (int num : nums) { //遇到大小王,跳过 if (num == 0) continue; //如果添加失败,即有重复值,无法组成顺子 if (!set.add(num)) return false; //记录最大最小值 if (num > max) max = num; if (num < min) min = num; } //如果最大值减最小值,大于等于5,那么就无法组成顺子 return max - min < 5 ? true : false; } }排序
class Solution { public boolean isStraight(int[] nums) { //排序 Arrays.sort(nums); int joker = 0; //大小王数 for (int i = 0; i < 4; i++) { //最小值往后移一位 if (nums[i] == 0) joker++; //有重复,无法组成顺子 else if (nums[i] == nums[i + 1]) return false; } return nums[4] - nums[joker] < 5 ? true : false; } }这道题其实有点小问题的,按照题意,A为1,那么示例1,A2345,在斗地主中是不能组成顺子的,如果不能组成的话,难度会增加。现在按照这个实例的话,那就简单很多了。 做这道题的时候,思路进了死胡同里了,没什么思路,也是看了Krahets大佬的题解后,max - min < 5解决这个问题。