從撲克牌中隨機抽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]