题目描述:
你正在和你的朋友玩 猜数字(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 可被视为奶牛。

说明: 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bulls-and-cows
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
HashMap解法解法:

class Solution {public String getHint(String secret, String guess) {if (secret.equals("")) return "";StringBuilder sb = new StringBuilder();int count1 = 0;int count2 = 0;HashMap<Character,Integer> map1 = new HashMap<>();HashMap<Character,Integer> map2 = new HashMap<>();char[] ch1 = secret.toCharArray();char[] ch2 = guess.toCharArray();for (int i = 0; i < ch1.length; i++) {if(ch1[i] == ch2[i]) count1++;else {map1.put(ch1[i],map1.getOrDefault(ch1[i],0)+1);map2.put(ch2[i],map2.getOrDefault(ch2[i],0)+1);}}sb.append(count1+"A");for (Character c : map1.keySet()) {if(map2.containsKey(c)) count2 += Math.min(map1.get(c),map2.get(c));}sb.append(count2+"B");return sb.toString();}
}

用桶解法:

class Solution {public String getHint(String secret, String guess) {StringBuilder sb = new StringBuilder();int countA = 0;int countB = 0;int[] count1 = new int[10];int[] count2 = new int[10];for (int i = 0; i < secret.length(); i++) {if(secret.charAt(i) == guess.charAt(i)) countA++;else {count1[secret.charAt(i) - '0']++;count2[guess.charAt(i) - '0']++;}}for (int i = 0; i < count1.length; i++) {countB += Math.min(count1[i],count2[i]);}sb.append(countA+"A"+countB+"B");return sb.toString();}
}

只用一个桶:

class Solution {public String getHint(String secret, String guess) {StringBuilder sb = new StringBuilder();int countA = 0;int countB = 0;int[] count = new int[10];for (int i = 0; i < secret.length(); i++) {if(secret.charAt(i) == guess.charAt(i)) countA++;else {count[secret.charAt(i) - '0']++;//先把每个数字的个数记录count[guess.charAt(i) - '0']--;//每有一个数字相同,位置不同的,就减一}}for (int i = 0; i < count.length; i++) {if(count[i] > 0) countB += count[i];//如果次数大于0,代表还差几个没猜中}                                      //这样,猜中的次数就是长度-剩余的-countAcountB = secret.length() - countA - countB;sb.append(countA+"A"+countB+"B");return sb.toString();}
}

299. 猜数字游戏(简单题)相关推荐

  1. 299. 猜数字游戏

    299. 猜数字游戏 你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少.朋友每猜测一次,你就会给他一个包含下述信息的提示: 猜 ...

  2. python猜数字游戏简单-python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...

  3. c语言编程题猜数字游戏6题,c语言编程—猜数字游戏.doc

    c语言编程-猜数字游戏 计算机实习报告 面向过程编程 用C语言求解实际问题 一.问题描述 游戏类第15个任务--猜数字游戏 计算机从0-9这10个数字中任意选择n个不重复数字(n≤10)组成一个5位数 ...

  4. 18行代码AC-Leecode 299. 猜数字游戏——Leecode每日一题系列

    今天是坚持每日一题打卡的第十三天 题目链接:https://leetcode-cn.com/problems/bulls-and-cows/ 题解汇总:https://zhanglong.blog.c ...

  5. LeetCode 299猜数字游戏

    你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少.朋友每猜测一次,你就会给他一个包含下述信息的提示: 猜测数字中有多少位属于数 ...

  6. LeetCode 299. 猜数字游戏

    1. 题目 你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜. 每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为"Bulls ...

  7. 299. 猜数字游戏。

    你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少.朋友每猜测一次,你就会给他一个包含下述信息的提示: 猜测数字中有多少位属于数 ...

  8. 每日一题:299. 猜数字游戏

    解题思路 利用HashMap记录字符和其对应的下标集合 代码 class Solution {public String getHint(String secret, String guess) {S ...

  9. 【LeetCode笔记】299. 猜数字游戏 (Java、偏数学)

    文章目录 题目描述 思路 && 代码 题目描述 顶级阅读题! 今天的每日一题,感觉评论区大佬的写法挺值得记录的,就又水了一篇答题文- 思路 && 代码 O(n).O(1 ...

最新文章

  1. 高通android开源代码下载
  2. 火狐浏览器书签(收藏夹)全部消失,历史记录也消失,如何恢复
  3. LeTax报错之 Incomplete \iffalse
  4. 如何将docker 镜像上传到docker hub仓库
  5. Visual Studio Code 前端调试不完全指南
  6. ckeditor与ckfinder的使用方法 .NET (转载)
  7. 用C++解析HTTP下载下来的HTML文档
  8. 10条途径迅速提高你的生活
  9. 三星Galaxy Note 10系列价格曝光:顶配售价要破万
  10. android fragment面试,Android fragment之间传递数据的方式?
  11. 前排强势围观|云端落地AI,如此超级干货有哪些?
  12. 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (四) 树莓派单子节点查询...
  13. 用C#代码实现求两条线段的交点并判断各种情况
  14. EV https证书申请与续费
  15. 苹果手机开不了机怎么办
  16. 原创短视频被搬运,平台也会侵权吗
  17. Android在Manifest里的权限配置
  18. 57 长短期记忆网络(LSTM)【动手学深度学习v2】
  19. pandas计算主力合约(模拟文化财经规则)
  20. 达梦数据库安装ODBC驱动及无法正常启动解决办法

热门文章

  1. 【SEO工具】抓取百度关键词相关关键词挖掘工具
  2. PowerBuilder 文本控件显示提示内容
  3. 使用eviews做线性回归分析
  4. GPU 编程 CPU 异同点_GPU(图形处理器) ARCHITECTURE的变迁史
  5. javacv学习之实现matlab中imfill算法(孔洞填充)
  6. [4750G] Ubuntu硬件优化篇——引导修复双显卡及屏幕亮度调节设置 bumblebee
  7. 多码头多式联运集装箱港口的全局规划
  8. 【自动控制系统的基本原理】
  9. 用html语言编写彩虹雨流动代码,前端H5 canvas 爱心和彩虹雨
  10. html中文utf8编码转换工具,UTF-8编码转换