题目
题解
解法一:遍历+排序+标记
遍历一遍先把大小王求出来、然后再从除去大小王的索引处开始遍历。flage-nums[i+1] - nums[i]) + 1
表示的是大小王的数量、假设相邻的数相差的数大于大小王的总数量那么一定无法构成顺子那么相减之后flag肯定是小于0,temp>flag是防止有重复元素出现。
class Solution {
public boolean isStraight(int[] nums) {
Arrays.sort(nums);
int flag = 0;
for (int i = 0; i < 5; i++) {
if (nums[i] == 0){
flag ++;
}else {
break;
}
}
for (int i = flag; i < 4; i++) {
int temp = flag - (nums[i+1] - nums[i]) + 1;
if (temp > flag || (flag=temp) < 0 ){
return false;
}
}
return true;
}
}
解法二:排序+遍历+相差5
参考自K神题解:面试题61. 扑克牌中的顺子(集合 Set / 排序,清晰图解)
这种方法是直接找出大小王的数量、然后直接最大减最小的值、结果小于五肯定能构成顺子。
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;
}
}