欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指Offer47-扑克牌顺子

程序员文章站 2022-06-17 16:55:15
...

剑指Offer47-扑克牌顺子
剑指Offer47-扑克牌顺子
直接看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
相关标签: 剑指Offer