剑指 Offer 61. 扑克牌中的顺子
class Solution { public boolean isStraight(int[] nums) { Arrays.sort(nums); int i = 3; if(nums[4]<3) return false; while(i>=0){ if(nums[i] == nums[i+1]) return false; if(nums[i] == nums[i+1] - 1){ i--; }else{ if(nums[0] == 0){ nums[0] = nums[i+1] - 1; i--; Arrays.sort(nums); }else{ return false; } } } return true; } }
public boolean isStraight(int[] nums) { Set<Integer> repeat = new HashSet<>(); int max = 0, min = 14; for(int num : nums) { if(num == 0) continue; // 跳过大小王 max = Math.max(max, num); // 最大牌 min = Math.min(min, num); // 最小牌 if(repeat.contains(num)) return false; // 若有重复,提前返回 false repeat.add(num); // 添加此牌至 Set } return max - min < 5; // 最大牌 - 最小牌 < 5 则可构成顺子 }
我的前方是万里征途,星辰大海!!