299. 猜数字游戏 : 简单模拟题

简介: 299. 猜数字游戏 : 简单模拟题

网络异常,图片无法展示
|


题目描述



这是 LeetCode 上的 299. 猜数字游戏 ,难度为 中等


Tag : 「模拟」


你在和朋友一起玩 猜数字(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 仅由数字组成


模拟



根据题意,我们可以对 secretsecretguessguess 进行诸位比较,统计公牛数量 aa 和奶牛数量 bb


对于字符相同的位置,我们可以直接对 aa 进行自增;对于字符不同的位置,使用「哈希表」进行分别统计 secretsecretguessguess 的词频,某个数字 xx 在两者词频中的较小值,即为该数字对应的奶牛数量,统计所有数字 [0, 9][0,9] 的奶牛数量总和即为 bb


代码:


class Solution {
    public String getHint(String secret, String guess) {
        int n = secret.length();
        int a = 0, b = 0;
        int[] cnt1 = new int[10], cnt2 = new int[10];
        for (int i = 0; i < n; i++) {
            int c1 = secret.charAt(i) - '0', c2= guess.charAt(i) - '0';
            if (c1 == c2) {
                a++;
            } else {
                cnt1[c1]++;
                cnt2[c2]++;
            }
        }
        for (int i = 0; i < 10; i++) b += Math.min(cnt1[i], cnt2[i]);
        return a + "A" + b + "B";
    }
}
复制代码


  • 时间复杂度:O(n)O(n)
  • 空间复杂度:令 CC 为字符集大小,CC 固定为 1010。复杂度为 O(C)O(C)


最后



这是我们「刷穿 LeetCode」系列文章的第 No.299 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
|
Android开发
Android实现语音播报的两种方式
Android实现语音播报的两种方式
851 0
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
1057 3
|
11月前
|
人工智能 自然语言处理 算法
DeepSeek:国产AI新势力,普通人如何用它赚钱?
DeepSeek 是一款由中国团队开发的大型语言模型,以其强大的自然语言处理能力迅速崛起,成为ChatGPT等国外大模型的强劲对手。它支持智能写作、代码生成、内容创作等多种功能,广泛应用于自媒体、编程、商业分析等领域。DeepSeek不仅免费且部分开源,用户可以直接访问官网体验,无需科学上网。其长文本处理能力和编程辅助功能尤为突出,适合长文写作和代码优化。DeepSeek还提供了多种变现途径,如自媒体写作、AI编程服务、课程咨询等,帮助用户在AI时代创造额外收入。掌握DeepSeek,开启AI变现之旅! 注:关注微信公众号“飞川”,发送“deepseek”获取丰富的资料包。
1183 73
|
Shell 网络安全 开发工具
【已解决】SSL certificate problem: self signed certificate
SSL certificate problem: self signed certificate
2712 2
|
人工智能 算法
AIGC创作活动 | 智"绘"AI,使用PAI创造风格百变绘画助手
使用阿里云人工智能平台PAIx Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理,实现文本驱动的图像编辑功能单卡即可完成AIGC图片风格变化、背景变化和主体变化等功能。让我们一同开启这场旅程,为您的图像编辑添上无限可能性的翅膀吧。
|
Linux C++
详细解读C++CTime使用方法
详细解读C++CTime使用方法
229 0
|
vr&ar
Bmfont 软件生成fnt 字体步骤(2)
Bmfont 软件生成fnt 字体步骤
505 0
|
JavaScript 前端开发 开发工具
Vue 项目利用 HBuilderX 打包 APP 流程
Vue 项目利用 HBuilderX 打包 APP 流程
2370 3
|
机器学习/深度学习 存储 运维
【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(8 月 14 日论文合集)
【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(8 月 14 日论文合集)
objdump反编译代码
objdump是显示object文件的详细信息的工具
521 0