每日一题2021/11/08
2021/11/8 6:10:16
本文主要是介绍每日一题2021/11/08,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
力扣:299. 猜数字游戏
难度 中等
题目描述:
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
- 猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛),
- 有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
给你一个秘密数字
secret
和朋友猜测的数字guess
,请你返回对朋友这次猜测的提示。提示的格式为
"xAyB"
,x
是公牛个数,y
是奶牛个数,A
表示公牛,B
表示奶牛。请注意秘密数字和朋友猜测的数字都可能含有重复数字。
示例 1:
输入: secret = "1807", guess = "7810" 输出: "1A3B" 解释: 数字和位置都对(公牛)用 '|' 连接,数字猜对位置不对(奶牛)的采用斜体加粗标识。 "1807" | "7810"示例 2:
输入: secret = "1123", guess = "0111" 输出: "1A1B" 解释: 数字和位置都对(公牛)用 '|' 连接,数字猜对位置不对(奶牛)的采用斜体加粗标识。 "1123" "1123" | or | "0111" "0111" 注意,两个不匹配的 1 中,只有一个会算作奶牛(数字猜对位置不对)。通过重新排列非公牛数字,其中仅有一个 1 可以成为公牛数字。示例 3:
输入:secret = "1", guess = "0" 输出:"0A0B"示例 4:
输入:secret = "1", guess = "1" 输出:"1A0B"提示:
- \(1\) <=
secret.length
,guess.length
<= \(1000\)secret.length == guess.length
secret
和guess
仅由数字组成来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bulls-and-cows
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
统计次数有关的题目一般都可以用哈希表完成:
- 统计
secret
中每个字母出现的次数,该过程中还可以顺便统计「位置与数字都相同」的数目。 - 遍历
guess
中的每个数字,统计「在secret
中有匹配数字」的数目。 - 由于 \(2\) 中的结果包括了 \(1\) 中的结果,所以要减去 \(1\) 的结果
- 将结果转为格式化字符串
双百代码实现如下:
class Solution { public: string getHint(string secret, string guess) { int x = 0, y = 0; int has[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; char str[9]; for (int i = 0; i < secret.size(); ++i) { if (secret[i] == guess[i]) { ++x; } ++has[secret[i] - '0']; } for (int i = 0; i < guess.size(); ++i) { if (has[guess[i] - '0']) { ++y; --has[guess[i] - '0']; } } sprintf(str, "%dA%dB", x, y - x); return string(str); } };
这篇关于每日一题2021/11/08的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南