noaman_wgs

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

【题目】抽五张扑克牌,判断五张扑克牌是不是顺子,大小王可看做任何数,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 }

 

posted on 2016-06-26 12:50  noaman_wgs  阅读(114)  评论(0)    收藏  举报