专栏首页前端小码农扑克牌中的顺子

扑克牌中的顺子

JavaScript实现LeetCode第61题:扑克牌中的顺子

题目描述

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

示例 1: 输入: [1,2,3,4,5] 输出: True 示例 2: 输入: [0,0,1,2,5] 输出: True

限制:1.数组长度为 5 2.数组的数取值为 [0, 13] .

思路分析

  • 先判断数组长度是否为5,如果不是,则直接返回false
  • 对数组进行排序,声明两个变量,一个为 wangNums,用来存储王的个数,一个为 grapNums,用来存储 排序后元素的差值
  • 遍历数组,nums[i]如果值为0,则 wangNums++,如果nums[i] == nums[i+1]则直接返回false, 其他情况,计算差值,累加到 grapNums
  • 最后判断如果 差值 (grapNums)小于王(wangNums)的个数,说明可以用王来构成顺子,返回true,否则返回false

解法

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var isStraight = function(nums) {
    if(nums.length != 5) {
        return false;
    }

    nums.sort((a, b) => a - b);
    let wangNums = 0; // 王的个数
    let grapNums = 0; // 排序后元素的差值
    for(let i = 0; i < nums.length - 1; i++) {
         if(nums[i] == 0) {
            wangNums++;
         } else if(nums[i] == nums[i+1]) {
             //不是王,并且还是对子,那肯定不是顺子了
             return false;
         } else {
            //不是王,计算一下两两的差值,最后与王的个数做比较
            grapNums += (nums[i+1] - nums[i] - 1);
         }
    }
    //差值小于王的个数,说明可以用王来构成顺子
    if(grapNums <= wangNums) {
        return true;
    }
    return false;
};

本文分享自微信公众号 - 牧码的星星(gh_0d71d9e8b1c3),作者:木子星兮i

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 将有序数组转换为二叉搜索树

    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

    木子星兮
  • 三数之和

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三...

    木子星兮
  • 更接近的三数之和

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假...

    木子星兮
  • Leetcode 53 Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) w...

    triplebee
  • leetcode第一天

    leetcode 第一天 2017年12月24日 第一次刷leetcode真的是好慢啊,三道题用了三个小时,而且都是简单题。 数组 1.(674)Longe...

    郭耀华
  • LeetCode 724. 寻找数组的中心索引

    我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。

    Michael阿明
  • Leetcode 26 Remove Duplicates from Sorted Array

    Given a sorted array, remove the duplicates in place such that each element app...

    triplebee
  • 三数之和

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三...

    用户7962184
  • Golang Leetcode 189. Rotate Array.go

    版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89011736

    anakinsun
  • 【LeetCode】448. Find All Numbers Disappeared in an Array

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051

扫码关注云+社区

领取腾讯云代金券