博客
关于我
LeetCode 剑指 Offer 61. 扑克牌中的顺子
阅读量:799 次
发布时间:2023-04-16

本文共 1561 字,大约阅读时间需要 5 分钟。

为了判断抽到的扑克牌是否形成一个顺子,我们需要考虑以下几点:

  • 排序数组:首先将牌进行排序,以便更容易检查是否连续。
  • 统计0的数量:因为大王和小王(0)可以替换为任何数字,所以统计0的数量可能会影响判断结果。
  • 去除了0后的数组:检查去除了0后的数组是否能形成连续的五个数字。
  • 处理0的情况:如果有至少两个0,可以用其中一个0来替换数组中的一个数字,使得剩下的四个数字连续。
  • 具体步骤如下:

  • 检查数组长度:确保数组长度为5,否则直接返回false。
  • 排序数组:将数组按升序排序。
  • 统计0的数量:遍历数组,统计0的数量。
  • 去除了0后的数组:创建一个新的数组,包含所有非零的元素。
  • 判断是否为顺子
    • 如果去除了0后的数组长度小于5,且0的数量大于等于2,返回true。
    • 否则,如果去除了0后的数组长度为5,检查这些数字是否连续。
  • 返回结果:根据上述判断,返回是否为顺子。
  • 以下是代码实现:

    import java.util.Arrays;public class Solution {    public boolean isStraight(int[] nums) {        if (nums.length != 5) {            return false;        }        Arrays.sort(nums);        int count0 = 0;        for (int num : nums) {            if (num == 0) {                count0++;            }        }        int[] d = new int[nums.length - count0];        for (int i = 0; i < nums.length; i++) {            if (nums[i] != 0) {                d[i - count0] = nums[i];            }        }        if (d.length < 5) {            if (count0 >= 2) {                return true;            } else {                return false;            }        } else {            boolean isConsecutive = true;            for (int i = 1; i < d.length; i++) {                if (d[i] - d[i-1] != 1) {                    isConsecutive = false;                    break;                }            }            return isConsecutive;        }    }}

    解释

  • 数组长度检查:首先检查数组长度是否为5,否则直接返回false。
  • 排序:将数组排序,以便后续处理。
  • 统计0的数量:遍历数组,统计0的数量。
  • 去除了0后的数组:创建一个新的数组d,包含所有非零元素。
  • 判断是否为顺子
    • 如果d的长度小于5且0的数量至少为2,返回true,因为可以使用0来替换其中一个数字,使得剩下的四个数字连续。
    • 否则,如果d的长度为5,检查这些数字是否连续。如果是,返回true;否则,返回false。
  • 返回结果:根据上述判断,返回是否为顺子。
  • 转载地址:http://wdgfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现找出买卖股票的最大利润算法(附完整源码)
    查看>>
    Objective-C实现找出买卖股票的最大利润算法(附完整源码)
    查看>>
    Objective-C实现找出二维数组中的鞍点(附完整源码)
    查看>>
    Objective-C实现找出由两个 3 位数字的乘积构成的最大回文数的算法 (附完整源码)
    查看>>
    Objective-C实现找出矩阵的最大最小值(附完整源码)
    查看>>
    Objective-C实现找到一个数字数组的中值算法(附完整源码)
    查看>>
    Objective-C实现找到具有 500 个除数的第一个三角形数算法(附完整源码)
    查看>>
    Objective-C实现找到最近的点对之间的距离算法(附完整源码)
    查看>>
    Objective-C实现抓包实例(附完整源码)
    查看>>
    Objective-C实现抽签抓阄(附完整源码)
    查看>>
    Objective-C实现抽象工厂模式(附完整源码)
    查看>>
    Objective-C实现拉格朗日插值法(附完整源码)
    查看>>
    Objective-C实现拉格朗日插值算法(附完整源码)
    查看>>
    Objective-C实现拓扑排序算法(附完整源码)
    查看>>
    Objective-C实现拦截输入法(附完整源码)
    查看>>
    Objective-C实现括号匹配(附完整源码)
    查看>>
    Objective-C实现拷贝二进制文件(附完整源码)
    查看>>
    Objective-C实现指定内存空间获取时间的函数(附完整源码)
    查看>>
    Objective-C实现指定点 x 处计算多项式 f(x) 并返回值算法(附完整源码)
    查看>>
    Objective-C实现按位倒序(附完整源码)
    查看>>