题目描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10位数字本身,A为1,J为11,Q为12,K为13,而大,小王可以看成任意数字。
思路分析:本题考察数学建模能力,我们很容易把5张牌看成由5个数字组成的数组,然后把大小王定义为0和其他区分开,能否构成顺子关键看要补缺的数目是否小于等于0的个数,若小于等于,则大小王可以补空,否则构不成顺子。所以主要有以下三步。
(1)对原数组进行排序;
(2)统计数组中0的个数,也就是大小王的个数;
(3)遍历数组,统计间隔是否能用大小王补全。
代码实现:
import java.util.Arrays; public class Solution { public boolean isContinuous(int [] numbers) { //如果为空,返回false if(numbers==null) return false; //对数组排序 Arrays.sort(numbers); //统计0的个数 int zero = 0; for(int i=0;i<numbers.length;i++) { if(numbers[i]==0) zero++; } //统计间隔数 int j=0; for(;j<numbers.length-1&&zero>=0;j++) { if(numbers[j]==numbers[j+1]) return false; if(numbers[j]+1+zero>=numbers[j+1]) { zero-=numbers[j+1]-numbers[j]-1; } else return false; } if(j==numbers.length-1) return true; else return false; } }