题目

从扑克牌中随机抽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

限制:

数组长度为 5

数组的数取值为 [0, 13] .

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

1.按条件
先排序,遍历,如果等于0直接记下0的数量进行下一轮循环,如果两张一样,直接返回false,如果上一位为0,直接下一轮循环,如果两个数相差大于1 且在 0 可以弥补的范围之内进行下一轮,扣除相应0的数量,否则return false

  1. /**
  2. * @param {number[]} nums
  3. * @return {boolean}
  4. */
  5. var isStraight = function (nums) {
  6. nums.sort((a, b) => a - b)
  7. let zeros = 0
  8. for (let i = 0; i < 5; i++) {
  9. if (nums[i] === 0) {
  10. zeros++
  11. continue
  12. }
  13. if (i === 0) {
  14. continue
  15. }
  16. if (nums[i] === nums[i - 1]) {
  17. return false
  18. }
  19. if (nums[i - 1] === 0) {
  20. continue
  21. }
  22. if (nums[i - 1] !== 0 && nums[i] - nums[i - 1] === 1) {
  23. continue
  24. }
  25. if (nums[i - 1] !== 0 && nums[i] - nums[i - 1] - 1 <= zeros) {
  26. zeros -= nums[i] - nums[i - 1] - 1
  27. continue
  28. } else {
  29. return false
  30. }
  31. }
  32. return true
  33. };

2.先排序,再找对子,然后max - min < 5 则可组成顺子(更优)