剑指offer:扑克牌顺子
Posted zhangxiaoyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:扑克牌顺子相关的知识,希望对你有一定的参考价值。
http://wiki.jikexueyuan.com/project/for-offer/question-forty-four.html
题目:从扑克牌中随机抽 5 张牌,判断是不是一个顺子, 即这 5 张牌是不是连续的。2~10 为数字本身, A 为 1。 J 为 11、Q 为 12、 为 13。小王可以看成任意数字。
首先把数组排序,
记录非0的最小值和最大值,
如果连起来则需要满足:
1)数组中不能有重复值(没有对子)
2)max-min<=4
public static boolean isContinuous(int [] numbers) { if (numbers == null || numbers.length != 5) { return false; } // 冒泡排序 for(int i=numbers.length-1;i>=0;i--){ for(int j=0;j<i;j++){ if(numbers[j]>numbers[j+1]){ int temp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j+1] = temp; } } } //找到第一个不是0的位置 int zeroindex = 0; while(zeroindex<numbers.length){ if(numbers[zeroindex]==0){ zeroindex++; }else{ break; } } if(zeroindex==numbers.length){ return true; } //判断是否有重复数字 for(int i=zeroindex;i<numbers.length-1;i++){ if(numbers[i]!=numbers[i+1]){ i++; }else{ return false; //有重复数字,不能连起来 } } //判断最大值、最小值是否差太多 if(numbers[numbers.length-1]-numbers[zeroindex]<=numbers.length-1){ return true; }else{ return false; } }
以上是关于剑指offer:扑克牌顺子的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 61. 扑克牌中的顺子