《剑指offer》扑克牌顺序
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》扑克牌顺序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目: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的運氣如何。為了方便起見,你可以認為大小王是0。
解析:首先把0去掉,0代表大小王,相當于癩子。然后剩下的排序,求每隊相鄰數據間大于1的和,然后與0的個數比較,若所有大于1的間距和小于或等于0的個數就滿足條件來了。
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Solution {public boolean isContinuous(int [] numbers) {if(numbers.length==0){//邊界條件return false;}List<Integer> list = new ArrayList<>();//記錄不是0的數字int count=0;//統計0的個數int need=0;//累加每對數據間和大于1的間距Arrays.sort(numbers);//1 3 5 0 0for(int i : numbers){if(i==0){count++;continue;}else {if(list.contains(i)){//都有重復的牌了,還組個什么順子,可以趕下場了return false;}list.add(i);}}//1 3 5for(int i=0;i<list.size()-1;i++){int j=i+1;if(j<list.size()){if(1!=(list.get(j)-list.get(i))){//相鄰兩個數據間的差不為1,就需要記錄中間差多少張牌了need+=(list.get(j)-list.get(i)-1);}}}return need<=count?true:false;} }總結
以上是生活随笔為你收集整理的《剑指offer》扑克牌顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《剑指offer》翻转单词顺序列
- 下一篇: 《去哪网编程题》表达式合法判断