【题目】抽五张扑克牌,判断五张扑克牌是不是顺子,大小王可看做任何数,0代替。
1 package com.exe10.offer; 2 3 import java.util.Arrays; 4 5 /** 6 * 【题目】抽五张扑克牌,判断五张扑克牌是不是顺子,大小王可看做任何数,0代替。 7 * @author WGS 8 * 9 */ 10 public class PokerIsContinuousCard { 11 12 public boolean pokerIsContinuousCard(int[] nums){ 13 if(nums==null ||nums.length!=5) return true; 14 15 //1 排序 16 Arrays.sort(nums); 17 //2 获取大小王0个数 这里约定大小王只有2个,不再判断 18 int numsOfJokers=0; 19 for(int i=0;i<nums.length && nums[i]==0;i++){ 20 numsOfJokers++; 21 } 22 //3 循环获取间隔数并且判断与大小王个数关系 23 int numsOfGap=0; 24 int small=numsOfJokers;//应当从非大小王位置开始获取间隔数,因为排序后大小王0肯定在前2位,所以应当忽略 25 int big=small+1; 26 while(big<nums.length){ 27 if(nums[small]==nums[big]) 28 return false;//非大小王的位置前后相同再不为顺子 29 numsOfGap+=nums[big]-nums[small]-1; 30 small=big; 31 ++big; 32 } 33 return (numsOfGap<=numsOfJokers)?true:false; 34 35 } 36 37 public static void main(String[] args) { 38 int[] numbers = {1,2,3,0,0}; 39 PokerIsContinuousCard p = new PokerIsContinuousCard(); 40 boolean f = p.pokerIsContinuousCard(numbers); 41 System.out.println(f); 42 } 58 }

浙公网安备 33010602011771号