[leetcode]Python实现-299. 猜数字游戏

299. 猜数字游戏

描述

你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。
请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。
请注意秘密数字和朋友的猜测数都可能含有重复数字。

示例1

输入: secret = “1807”, guess = “7810”
输出: “1A3B”
解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。

示例2

输入: secret = “1123”, guess = “0111”
输出: “1A1B”
解释: 朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。

思路:
首先需要认真理解一下题目的意思。
题目中有三种结果:
1)数字正确且位置正确 - 公牛Bull 输出结果用A表示。
2)数字正确但位置不对 - 奶牛Cow 输出结果用B表示。
3)字符串为空。

最后要求输出的是A和B的数量,那么问题就转换为如何统计A和B的数量。大致流程是先对secret进行遍历,将字符及其数量存储到字典d中,然后再遍历guess进行数量的统计。

对于A数字正确位置正确很好理解,直接判断secret[i] 是否等于 guess[i]即可,直接累加可得到A的数量。但是需要注意的是B的情况,由于只对数字做了限制,对位置没有限制,因此在进行遍历时不能直接做累加操作,应考虑前后字符重复的问题(例如输入“1122”,”1222“),待全部遍历完再进行数量统计,因此引入cow字典用于记录中间产生的数据。

需要注意的是数字正确,需满足两个条件:有共同字符A,且guess中A字符的数量小于等于secret。

class Solution:
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值