剑指offer系列51---扑克牌顺子

时间:2022-11-19 07:37:23

【题目】抽五张扑克牌,判断五张扑克牌是不是顺子,大小王可看做任何数,0代替。

 package com.exe10.offer;

 import java.util.Arrays;

 /**
* 【题目】抽五张扑克牌,判断五张扑克牌是不是顺子,大小王可看做任何数,0代替。
* @author WGS
*
*/
public class PokerIsContinuousCard { public boolean pokerIsContinuousCard(int[] nums){
if(nums==null ||nums.length!=5) return true; //1 排序
Arrays.sort(nums);
//2 获取大小王0个数 这里约定大小王只有2个,不再判断
int numsOfJokers=0;
for(int i=0;i<nums.length && nums[i]==0;i++){
numsOfJokers++;
}
//3 循环获取间隔数并且判断与大小王个数关系
int numsOfGap=0;
int small=numsOfJokers;//应当从非大小王位置开始获取间隔数,因为排序后大小王0肯定在前2位,所以应当忽略
int big=small+1;
while(big<nums.length){
if(nums[small]==nums[big])
return false;//非大小王的位置前后相同再不为顺子
numsOfGap+=nums[big]-nums[small]-1;
small=big;
++big;
}
return (numsOfGap<=numsOfJokers)?true:false; } public static void main(String[] args) {
int[] numbers = {1,2,3,0,0};
PokerIsContinuousCard p = new PokerIsContinuousCard();
boolean f = p.pokerIsContinuousCard(numbers);
System.out.println(f);
}
}