从扑克牌中随机抽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] .
思路:
- 因为是找顺子,所以首先想到的肯定是将数组排序。排序之后判断是不是单调连续递增数列,这里大王和小王的个数是不限制的,也就是说输入甚至可以是[0,0,0,0,0],要考虑到这种特殊情况。
- 排序之后统计0的个数,看0的个数是否可以将非0数列补充成单调递增数列,即计算数列中的空缺,判断0的个数是否大等于空缺数(注意是大等于,不是等于)。
代码:
# LeetCode
class Solution:
def isStraight(self, nums: List[int]) -> bool:
nums.sort()
count0, count = nums.count(0), 0
for i in range(count0, len(nums)-1):
if nums[i] == nums[i+1]:
return False
count += nums[i+1]-nums[i]-1
if count <= count0:
return True
if len(nums[count0:]) == nums[-1]-nums[count0]+1:
return True
return False
# 牛客
# -*- coding:utf-8 -*-
class Solution:
def IsContinuous(self, numbers):
# write code here
if not numbers:
return False
numbers.sort()
count = numbers.count(0)
if count == len(numbers)-1:
return True
if numbers[-1] - numbers[count] + 1 == len(numbers):
for i in numbers[count:]:
if numbers.count(i) > 1:
return False
return True
else:
return False
测试用例:
[0,0,0,0,0]
[0,0,0,0,1]
[0,0,0,1, 2]
[0,0,0,1,1]
[0,1,2,2,4]
[1,2,3,4,5]