题目描述
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
解题思路
必须满足两个条件:
- 除0外没有重复的数
- max - min < 5
代码
public class isContinuous {
public static boolean isContinuous(int [] numbers) {
if (numbers==null || numbers.length!=5)
return false;
//给数组排序
Arrays.sort(numbers);
//给数组统计各个数字的个数
HashMap<Integer, Integer> numberCounter = new HashMap<>();
numberCounter.put(0,0);
for (int num:numbers){
if (numberCounter.containsKey(num)){
numberCounter.put(num, numberCounter.get(num) + 1);
}else{
numberCounter.put(num, 1);
}
}
for (Map.Entry<Integer, Integer> entry : numberCounter.entrySet()) {
// System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
if (entry.getKey()!=0 && entry.getValue()>1)
return false;
}
int ZeroNumber = numberCounter.get(0);
int DiffSum = 0;
for (int i=ZeroNumber; i<4;i++){
DiffSum += (numbers[i+1] - numbers[i]);
}
for (int num:numbers){
System.out.print(num + " ");
}
System.out.println();
System.out.println(DiffSum);
if (DiffSum<=4)
return true;
else
return false;
}
public static void main(String[] args) {
int[] data = new int[]{2,3,8,0,0};
int[] data1 = new int[]{2,3,5,6,0};
int[] data2 = new int[]{2,0,0,0,0};
int[] data3 = new int[]{1,5,0,0,0};
int[] data4 = new int[]{1,6,0,0,0};
System.out.println(isContinuous(data));
System.out.println(isContinuous(data1));
System.out.println(isContinuous(data2));
System.out.println(isContinuous(data3));
System.out.println(isContinuous(data4));
}