☀(day41)
目录
📝题目:
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls",公牛),
有多少位属于数字猜对了但是位置不对(称为 "Cows",奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。
提示的格式为 "xAyB" ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。
请注意秘密数字和朋友猜测的数字都可能含有重复数字。
⭐示例 1:
⭐示例 2:
🚩题目分析:
刚看题目我也是有些蒙,不懂题目在说什么,后来静下来看题目发现题目也蛮简单的。
题目给出secret和guess一个是你写出的数字一个是朋友猜的数字。我们要做的就是比较这两个数字中:
1.在同一位置上的数是否相同,并给出有几个相同。
2.除去符合条件一的数,guess剩下的数是否可以经过重新排列使得满足条件1,并给出有几个数可以排列后满足。
💡解题思路:
🌟解法一:
🌈代码实现
def getHint(secret, guess):
bulls, cows = 0, 0
dic_s = dict()
dic_g = dict()
for i, c in enumerate(secret):
if guess[i] == c:
bulls += 1
else:
dic_s[c] = dic_s.get(c, 0) + 1
dic_g[guess[i]] = dic_g.get(guess[i], 0) + 1
for i in dic_s:
if i in dic_g:
cows += min(dic_g[i], dic_s[i])
return str(bulls) + 'A' + str(cows) + 'B'
✏代码注释
def getHint(secret, guess):
bulls, cows = 0, 0 # 初始化计数变量
dic_s = dict() # 初始化用于储存数字出现次数的字典
dic_g = dict()
for i, c in enumerate(secret): # 使用enumerate()函数获取secret中元素的索引i和元素c
if guess[i] == c: # 判断guess和secret同一位置的数是否相等
bulls += 1 # 相等则公牛计数+1
else: # 如果不相等
dic_s[c] = dic_s.get(c, 0) + 1 # 实用字典储存该位置上的数出现的次数
dic_g[guess[i]] = dic_g.get(guess[i], 0) + 1
for i in dic_s: # 接着遍历字典dic_s,并判断dic_s中的元素是否在dic_g中
if i in dic_g:
cows += min(dic_g[i], dic_s[i]) # 实用min取小
return str(bulls) + 'A' + str(cows) + 'B'
🌟解法一:
🌈代码实现
from collections import Counter
def getHint(secret, guess):
bull = sum(secret[i] == guess[i] for i in range(len(secret)))
cow = sum((Counter(secret) & Counter(guess)).values()) - bull
return f'{bull}A{cow}B'
今天就到这,明天见。🚀
❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄