题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张\^_\^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。

Solutions

  倒没有什么特别的考察,主要看题目:

# -*- coding:utf-8 -*-
class Solution:
    def IsContinuous(self, numbers):
        # write code here
        if numbers is None or len(numbers) < 5:
            return False
        n_0 = 0
        for n in numbers:
            if n == 0:
                n_0 += 1
        if n_0 == 4:
            return True
        count = 0
        numbers = sorted(numbers)

        pre = numbers[n_0]
        
        for n in numbers[n_0+1:]:
            print(n, pre)
            if pre != 0 and pre == n:
                return False
            else:
                count += n - pre
            pre = n
        if count - 4 != 0:
            return False
        return True
# 运行时间:25ms
# 占用内存:5860k

  对比下别人的实现:

# -*- coding:utf-8 -*-
class Solution:
    def IsContinuous(self, numbers):
        # write code here
        if not numbers:
            return False
        numbers.sort()
        zeros = numbers.count(0)
        for i,value in enumerate(numbers[:-1]):
            if value != 0:
                if value==numbers[i+1]:
                    return False
                zeros=zeros - (numbers[i+1]-value-1)
                if zeros <0 :
                    return False
        return True
# 运行时间:23ms
# 占用内存:5732k

References

  1. 044. 扑克牌顺子