LeetCode: 剑指 Offer 61. 扑克牌中的顺子
需要考虑的情况有点多,不是思维上的难
情况种类大概 0,0,2,2,5 4,2,9,7,6 0,0,1,2,5
情况列举法
class Solution { public boolean isStraight(int[] nums) { // 从小到大排序 Arrays.sort(nums); // 记录 0 的个数 int zero = 0; for (int i = 0; i < 5; i++) { if(nums[i] == 0) zero++; else break; } int i = zero; while (i < 4){ int temp = nums[i]; if (temp + 1 == nums[i + 1]){ i++; } else if(temp == nums[i + 1]){ // 出现重复的 return false; } else { // 不是连续的 int dis = nums[i + 1] - temp - 1; zero -= dis; if(zero < 0) return false; i++; } } return true; } }利用组成顺子的特点
class Solution { public boolean isStraight(int[] nums) { Arrays.sort(nums); int zero = 0; for (int i = 0; i < nums.length - 1; i++) { if(nums[i] == 0) zero++; else if(nums[i] == nums[i + 1]) return false; } int mx = nums[nums.length - 1]; int mn = nums[zero]; int dis = mx - mn; if(dis > 4) return false; // 只要 最大值 - 最小值 不大于 4 就可以构成顺子 return true; } }>> 解题思路