扑克牌顺子
描述
现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。 有如下规则:
-
A为1,J为11,Q为12,K为13,A不能视为14
-
大、小王为 0,0可以看作任意牌
-
如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
例如:给出数据[6,0,2,0,4] 中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4] 这样这五张牌在[2,6]区间连续,输出true 数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]
解题
/**
* 扑克排连续问题
* 1.数组排序 2.集合
*/
import java.util.Arrays;
import java.util.TreeSet;
public class Solution {
public static void main(String[] args) {
int[] a={6,0,2,0,4};
Solution s1 = new Solution();
System.out.println(s1.IsContinous(a));
}
public boolean IsContinous(int[] numbers){
if (numbers.length!=5) return false;
Arrays.sort(numbers);//排序
int count=0;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i]==0) {
count++;//寻找初始值的下标
continue;
}
if (i+1<numbers.length&&numbers[i]==numbers[i+1]) return false;//相同数字则不连续
}
return numbers[numbers.length-1]-numbers[count]<5;//初始数字与最大数字之差小于5
}
public boolean IsContinous2(int[] numbers){
if (numbers.length!=5) return false;
TreeSet<Integer> set = new TreeSet<>();//集合
for (int i = 0; i < numbers.length; i++) {
if (numbers[i]==0) continue;
if (set.contains(numbers[i])) return false;
set.add(numbers[i]);
}
return set.last()-set.first()<5;//集合中最大最小元素之差小于5
}
}