剑指Offer47-扑克牌顺子
程序员文章站
2022-06-17 16:55:15
...
直接看LeetCode的描述吧。
trick难想到,所以就用简单的排序吧,用的是快排。
然后两两检查元素差值,如果差值刚好可以用0的个数(即大小王的个数)来弥补,那就pop(0) append新的,继续检查两个元素,要注意的是,0的个数要随着被使用的个数而减掉。如果全部遍历没出错,那就没错了,如果遍历中间就出错了,那就直接False。
还有一个要注意的就是,如果去除0后,列表里仍有重复元素,说明必定False!
# -*- coding:utf-8 -*-
class Solution:
def IsContinuous(self, numbers):
# write code here
if len(numbers) == 0:
return False
def helper(numbers):
if len(numbers) == 0:
return []
left = []
right = []
cur = numbers[0]
for i in numbers[1:]:
if i > cur:
right.append(i)
else:
left.append(i)
return helper(left) + [cur] + helper(right)
n = numbers.count(0)
newsort = helper(numbers)[n:]
tmp_set = set(newsort)
if len(tmp_set) < len(newsort):
return False
compare = []
for item in newsort:
compare.append(item)
if len(compare) == 2:
tmp = compare[1] - compare[0]
if tmp != 1:
if tmp-1 >n:
return False
else:
n -= (tmp-1)
compare.pop(0)
return True
下一篇: Restful 示例