1. 程式人生 > >劍指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的運氣如何, 如果牌能組成順子就輸出true,否則就輸出false。為了方便起見,你可以認為大小王是0。

解題思路

  1. 對陣列排序
  2. 計算陣列中 0 的個數
  3. 計算缺少的差值
    0 的個數大於等於差值,那就代表可以排序

AC程式碼

思路要清晰,寫程式碼要快準狠。

import java.util.Arrays;

public class Solution {
    public boolean isContinuous(int [] numbers) {
        if(numbers == null || numbers.length == 0) return false; // 1
        Arrays.sort(numbers);
        int
numsOfZero = 0; int gaps = 0; for(int i = 0;i < numbers.length;i++){ if(i != 0 && numbers[i] != 0 && numbers[i - 1] == numbers[i]) return false; // 2,可以連續兩個 0 if(i != 0 && numbers[i - 1] != 0 && numbers[i] - numbers[i - 1] != 1) gaps +=
numbers[i] - numbers[i - 1] - 1; // 3 if(numbers[i] == 0) numsOfZero++; } if(gaps <= numsOfZero) return true; // 4 return false; } }