题目:299. 猜数字游戏
链接:https://leetcode-cn.com/problems/bulls-and-cows
问题:
你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。 请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。 请注意秘密数字和朋友的猜测数都可能含有重复数字。 示例 1: 输入: secret = "1807", guess = "7810" 输出: "1A3B" 解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。
解题:
1、首先计算数字相同且位置相同的个数,其次计算数字相同但位置不同的个数。
代码:
class Solution(object):
def getHint(self, secret, guess):
"""
:type secret: str
:type guess: str
:rtype: str
"""
A_cnt = 0
B_cnt = 0
d = {}
# 数字相同,位置相同
for i, si in enumerate(secret):
if i < len(guess) and guess[i] == si:
A_cnt += 1
else:
d[si] = d.get(si, 0) + 1
# 数字相同,位置不同
for i, gi in enumerate(guess):
if i < len(secret) and gi == secret[i]:
pass
elif d.get(gi, 0) > 0:
B_cnt += 1
d[gi] -= 1
return "{}A{}B".format(A_cnt, B_cnt)
PS:刷了打卡群的题,再刷另一道题,并且总结,确实耗费很多时间。如果时间不够,以后的更新会总结打卡群的题。
PPS:还是得日更呀,总结一下总是好的。