【leetcode】珠玑妙算(python实现)
题⽬:
珠玑妙算游戏(the game of master mind)的玩法如下。
计算机有4个槽,每个槽放⼀个球,颜⾊可能是红⾊(R)、黄⾊(Y)、绿⾊(G)或蓝⾊(B)。例如,计算机可能有RGGB 4种(槽1为红⾊,槽2、3为绿⾊,槽4为蓝⾊)。作为⽤户,你试图猜出颜⾊组合。打个⽐⽅,你可能会猜YRGB。要是猜对某个槽的颜⾊,则算⼀
次“猜中”;要是只猜对颜⾊但槽位猜错了,则算⼀次“伪猜中”。注意,“猜中”不能算⼊“伪猜中”。
给定⼀种颜⾊组合solution和⼀个猜测guess,编写⼀个⽅法,返回猜中和伪猜中的次数answer,其中answer[0]为猜中的次
数,answer[1]为伪猜中的次数。
⽰例:
输⼊: solution="RGBY",guess="GGRR"
输出: [1,1]
解释: 猜中1次,伪猜中1次。
字符串replace函数
思路:
相同->猜中,从字符串中删除(直接在这⼀步就把猜中从伪猜中的数量中减去了);
不同->保留(作为错误字符串进⾏后续处理);
统计错误字符串中每个字符的数量,与正确字符串取交集即为伪猜中数量,然后删除对应字符。
代码:
class Solution:
def masterMind(self, solution: str, guess: str) -> List[int]:
j=0
answer=[0,0]
for _ in solution:
if _==guess[j]:
answer[0]+=1
place(_,"",1)
place(_,"",1)
else:
j+=1
for _ in guess:
if _ != "" :
count1 = unt(_)
count2 = unt(_)
if count1 > 1:
guess=list(filter(lambda x : x != _ , guess))
answer[1]+=min(count2,count1)
return answer
结果:
总结:代码长度较长 表现也⼀般 较为基础 综合运⽤了filter函数 (前为判断函数,后为需要迭代的内容)、count函数、replace函数,可参考并熟悉基础函数。
⽐较喜欢的他⼈代码:(⾮常简洁,思想基本与本⼈的相同,最终的执⾏⽤时和内存消耗经检测也与
本⼈的⼀致,但实现⽅式简洁很多,值得借鉴)
class Solution:
def masterMind(self, solution: str, guess: str) -> List[int]:
a = sum(i == j for i, j in zip(solution, guess))
b = sum((collections.Counter(solution) & collections.Counter(guess)).values())
return [a, b - a]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。