题目要求
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
解题思路
方法一
- 首先判断是否有重复,有的话直接返回False。
- 再判断是否max_num - min_num < 5。
class Solution(object):
def isStraight(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
# 首先判断是否有重复,有的话直接返回False。
temp = []
for num in nums:
if num != 0:
if num not in temp: temp.append(num)
else: return False
# 再判断是否max_num - min_num < 5。
max_num = 0
min_num = 14
for num in temp:
if num > max_num: max_num = num
if num < min_num and num: min_num = num
return max_num - min_num < 5
方法二
- 排序。
- 然后遍历。
class Solution(object):
def isStraight(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
# 排序
nums.sort()
# 先求得0的个数,和第一个非0的数字位置。
zero_num = 0
index = 0
for num in nums:
if num != 0:
break
if num == 0:
zero_num += 1
index += 1
# 继续遍历剩下的非0元素。
for i in range(index, len(nums)-1):
if nums[i+1] - nums[i] == 1:
pass
elif nums[i+1] == nums[i]:
return False
else:
zero_num -= nums[i+1] - nums[i] - 1
if zero_num < 0:
return False
return True