💡题目要求
- 猜数字游戏
你在和朋友一起玩 猜数字(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 仅由数字组成

💡答案和解题思路
本来我自己写的时候是先把string转成了int,然后再遍历,比较麻烦
🌲1.上代码
public string GetHint(string secret, string guess)
{
int bulls = 0;
int cows = 0;
int[] bullsCount=new int[10];
int[] cowsCount=new int[10];
for (int i = 0; i < secret.Length; i++)
{
if (secret[i]==guess[i])
{
bulls++;
}
else
{
//在ASCII编码中, 0~9 的编码是 0x30(48D)~0x39(57D), 所以当c在‘0'~'9'的范围中时,c - '0' 就相当于计算c的实际数值,例如 c 是 '1', 则 c - '0' = 1, 把字符值转为数字值了
bullsCount[secret[i]-'0']++;
cowsCount[guess[i]-'0']++;
}
}
for (int i = 0; i < 10; i++)
{
cows += Math.Min(bullsCount[i], cowsCount[i]);
}
return bulls+"A"+cows+"B";
}
🌲2.解题思路
这个题思路是不难,没有想到的就是char—>int。
遍历答案,如果当前位置的char相等,就是公牛,可以算出公牛的数量,如果不等,就记录下来
最后比较两个数组里面最小的次数的累加,就是奶牛的数量
💡二、知识点学习
今天的知识点就是:字符类型转整数类型 char——int
总结
欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。
如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~
声明:本博文章若非特殊注明皆为原创原文链接
https://blog.youkuaiyun.com/Wrinkle2017/article/details/121209511
————————————————————————————————
💢💢版权声明
版权声明:本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系
对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明

本文详解了如何解决LeetCode猜数字游戏问题,涉及字符到整数的转换,公牛与奶牛的计数技巧。通过实例演示和代码实现,帮助理解字符数组比较的算法思路。
648

被折叠的 条评论
为什么被折叠?



