题目
你正在与朋友玩「公牛与母牛」的游戏,规则如下:你写下一个秘密数字让朋友猜。你的朋友每猜一次,你都提示他猜的数有多少数位的数字和位置都猜对了(即“公牛”),以及有多少数位的数字猜对,但位置不对(即“母牛”)。你的朋友不断修改猜测值,直到与你的秘密数字相同。
示例:
你的秘密数字:"1807"
朋友猜的数字:"7810"
提示:1 个公牛,3 个母牛(公牛是 8,母牛是 0、1、7)。
编写一个函数,根据你的秘密数字和朋友猜的数字来返回提示,使用 A 表示公牛,使用 B 表示母牛。在上面的示例中,你的函数应该返回 “1A3B”。
请注意,秘密数字和朋友猜的数字都有可能包含重复数位,例如:
你的秘密数字:"1123"
朋友猜的数字:"0111"
这种情况下,朋友猜的数字的第一个 1 是公牛,第二或第三个 1 是母牛,你的函数应该返回 “1A1B”。
你可以假设秘密数字和朋友猜的数字都只包含数字,并长度相等。
难度:容易
编程语言:C++
分析
程序框架为:
|
|
我的思路是,把 secret 和 guess 转化为 char secretArr[] 和 char guessArr[],同时遍历。如果 guessArr[i] == secretArr[i],说明 guessArr 的第 i 位是公牛,则记录到 int numA 里。如果 guessArr[i] != secretArr[i],则把 guessArr[i] 和 secretArr[i] 分别保存到 mapGuess<char, int>
和 mapSecret<char, int>
中。遍历完成后,根据 mapGuess和 mapSecret 计算出 int numB。
伪代码如下:
|
|
代码如下:
|
|
提交到 Leetcode,Accepted! :) 运行时间为 19ms。