这题挺有意思的,是技巧题。因为每个兔子能看到和他相同的颜色的兔子,那么我们可以知道如果这两只兔子相同,那么他们看到的其他颜色一样的兔子的数量一定是一样的。这样的话,也就是说如果一个兔子看到的数量和其他兔子不一样,那么这只兔子就一定是其他颜色的,那么结果就应该加上这只兔子看到的数量再加上它本身。这时候我们需要考虑看到相同兔子数量的情况,这里面也是很tricky,设想一下如果出现了1,1,1。这时候的兔子数量不应该是2只,而是4只,因为三个1本身就超过了2的限制。这时候我们就应该用整除和求余的方式将这些数据分批次。来计算,此外,0的情况比较特殊,需要单独考虑,附代码:
class Solution:
def numRabbits(self, answers):
"""
:type answers: List[int]
:rtype: int
"""
result = 0
if len(answers) == 0:
return 0
temp = {}
for answer in answers:
if answer not in temp:
temp[answer] = 1
else:
temp[answer] += 1
for key,value in temp.items():
count = int(value/(key+1))
if key != 0:
if value % (key+1) == 0:
result += (count)*(key+1)
else:
result += (count+1)*(key+1)
else :
result += (count)*(key+1)
return result