45:扑克牌顺子
问题描述:
现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:
\1. A为1,J为11,Q为12,K为13,A不能视为14
\2. 大、小王为 0,0可以看作任意牌
\3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
例如:给出数据[6,0,2,0,4]
中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]
这样这五张牌在[2,6]区间连续,输出true
数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]
问题分析:
给数组进行排序,初始赋值num = 0;然后进行遍历,若为0,则跳出本次循环进入下一次循环,若array[i]=array[i+1] 返回false 否则
num= num+array[i+1]-array[i];最后 对num的值进行判断,只要num的值小于4 则返回为真 否则 为假
代码实现
package com.xu.fingeroffer.fifry;
import java.util.Arrays;
public class 扑克牌顺子 {
public boolean IsContinuous(int[] numbers) {
//将传入的数组进行排序
Arrays.sort(numbers);
int num = 0;
//遍历数组
for (int i = 0; i < numbers.length-1; i++) {
//如果是0 则跳出循环
if (numbers[i] == 0) {
continue;
}
//如果有重复的数,返回false
else if (numbers[i] == numbers[i + 1]) {
return false;
} else {
num = num + (numbers[i + 1] - numbers[i]);
}
}
if (num <= 4) {
return true;
} else
{
return false;
}
}
}