自己写的,略微有些麻烦。
public boolean isStraight(int[] nums) {
int zCount = 0;
int[] arr = new int[5];
int index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) zCount++;
else arr[index++] = nums[i];
}
Arrays.sort(arr,0,index);
for (int i = 1; i < index; i++) {
if (arr[i] != arr[i - 1] + 1){
if (zCount > 0){
zCount--;
arr[i - 1]++;
i--;
} else {
return false;
}
}
}
return true;
}
代码和思路来源:
https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof/solution/mian-shi-ti-61-bu-ke-pai-zhong-de-shun-zi-ji-he-se/
题解思路:
利用两个条件:1.有重复的必然不行2.最大值 - 最小值大于等于5的必然不行,比如同时出现1和6怎么办?没有办法构成一个5张牌的顺子。
所以判别条件就很简单了:没重复(除了0) && 再加 max - min < 5
public boolean isStraight1(int[] nums) {
int min = 15,max = 1;
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
if (num == 0) continue;
if (set.contains(num)) return false;
min = Math.min(min,num);
max = Math.max(max,num);
set.add(num);
}
return max - min < 5;
}