69.扑克牌的顺子
从扑克牌中随机抽 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
代码:
class Solution {
public boolean isContinuous(int [] numbers) {
//边界条件检查:数组不能为null且长度必须为5
if(numbers == null||numbers.length!=5)return false;
//将数组排序方便后续处理
Arrays.sort(numbers);
//cnt为大小王(0)的数量
//gap为非零数字之间的间隔总数
int cnt = 0, gap = 0;
//统计大小王的数量
for(int i = 0;i<5;i++)if(numbers[i]==0)cnt++;
//检查非零数字是否有重复,并计算间隔
for(int i = cnt;i<4;i++){
//如果有重复的非零数字,直接返回false
if(numbers[i]==numbers[i+1])return false;
//计算相邻两个非零数字之间的间隔
gap+=numbers[i+1]-numbers[i]-1;
}
//判断大小王的数量是否足够填补所有间隔
return cnt>=gap;
}
}