Skip to content

Latest commit

 

History

History
74 lines (66 loc) · 1.97 KB

扑克牌中的顺子.md

File metadata and controls

74 lines (66 loc) · 1.97 KB

题目描述

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。

测试用例

  • 功能测试(抽出的牌中有一个或者多个大、小王;抽出的牌中没有大、小王;抽出牌有对子)
  • 特殊输入测试(输入空指针)

题目考点

考察应聘者的抽象建模能力。

我这个小伙子抽象能力不行呀!!!

解题思路

  1. 数组排序
  2. 统计数组中0的个数
  3. 统计排序之后的数组中相邻数字之间的空缺总数
  4. 比较0的个数和空缺总数

自己解题

没有好的抽象,只有超级暴力解题。

参考解题

/**
 * 扑克牌中的顺子
 *
 * @Author rex
 * 2018/9/18
 */
public class Solution {
    /**
     * 参考解题
     * @param numbers 0表示大小王
     * @return
     */
    public boolean isContinuous(int [] numbers) {
        // 防止特殊输入测试
        if (numbers == null || numbers.length < 1) {
            return false;
        }
        // 1. 数组排序
        Arrays.sort(numbers);
        // 2. 统计数组中0的个数
        int zeroCount = 0;
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] == 0) {
                zeroCount++;
            } else {
                break;
            }
        }
        // 3. 统计排序之后的数组中相邻数字之间的空缺总数
        int lackCount = 0;
        int temp = numbers[zeroCount];
        for (int i = zeroCount; i < numbers.length - 1; ) {
            if (numbers[i + 1] - temp == 1) {
                i++;
            } else if (numbers[i + 1] - temp == 0) {
                return false;
            } else {
                lackCount++;
            }
            temp++;
        }
        // 4. 比较0的个数和空缺总数
        if (lackCount > zeroCount) {
            return false;
        }
        return true;

    }
}