题目描述
从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。
2∼10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,大小王可以看做任意数字。
为了方便,大小王均以 0 来表示,并且假设这副牌中大小王均有两张。
样例描述
样例1
输入:[8,9,10,11,12]
输出:true
样例2
输入:[0,8,9,11,12]
输出:true
思路
- 删除所有0
- 看是否有重复的数,若有则不是顺子
- 若没有相同的,看最大值和最小值差值是否在4以内,中间空缺的部分用0来补,若可以补完,说明是合法的顺子,0够用
代码
class Solution {
public boolean isContinuous(int [] numbers) {
//注意特判,若输出为空 要返回
if (numbers.length == 0) return false;
Arrays.sort(numbers);
int k = 0; //记录0的个数
while (numbers[k] == 0) k++;
//判断非0部分是否有重复
for (int i = k + 1; i < numbers.length; i++){
if (numbers[i] == numbers[i-1]){
return false;
}
}
//判断最大值和最小值的差值 是否在小于等于4 说明可填充
return numbers[numbers.length - 1] - numbers[k] <= 4;
}
}