├── problem └── 谷歌面试题:猜数字游戏.md └── README.md /problem/谷歌面试题:猜数字游戏.md: -------------------------------------------------------------------------------- 1 | ## [leetcode/lintcode 题解] 谷歌面试题:猜数字游戏 2 | 3 | ### 描述 4 | 5 | 你正在和你的朋友玩 猜数字 (Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。 6 | 7 | 请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。 8 | 9 | 请注意秘密数字和朋友的猜测数都可能含有重复数字。 10 | 11 | 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等 12 | 13 | [在线评测地址](https://www.lintcode.com/problem/1299/?utm_source=sc-github-sy) 14 | 15 | ### 样例1 16 | 17 | ``` 18 | 输入:secret = "1807", guess = "7810" 19 | 输出:"1A3B" 20 | 解释:1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。 21 | ``` 22 | 23 | ### 样例 2 24 | 25 | ``` 26 | 输入:secret = "1123", guess = "0111" 27 | 输出:"1A1B" 28 | 解释:朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。 29 | ``` 30 | 31 | ### 解题思路 32 | 33 | ### 考点:哈希表 34 | 35 | ### 题解:第一遍遍历计算所有相同位置大小相同的个数,分别用大小为10的数组记录两个字符串每个数字出现的次数,第二次遍历数组,相同的次数为对应位置的最小值。 36 | 37 | ### 源代码 38 | 39 | ``` 40 | class Solution { 41 | public String getHint(String secret, String guess) { 42 | int a = 0,b = 0, n = secret.length(); 43 | int[] ds = new int[10]; 44 | int[] dg = new int[10]; 45 | for(int i = 0; i < n; i++){ 46 | int x = secret.charAt(i)-'0'; 47 | int y = guess.charAt(i)-'0'; 48 | if(x == y) { 49 | a++; 50 | } 51 | ds[x]++; 52 | dg[y]++; 53 | } 54 | for(int i = 0; i < 10; i++) { 55 | b += Math.min(ds[i],dg[i]); 56 | } 57 | return a+""+'A'+(b-a)+""+'B'; 58 | } 59 | } 60 | ``` 61 | 62 | [更多题解参考](https://www.jiuzhang.com/solution/bulls-and-cows/?utm_source=sc-github-sy) 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LeetCode-master 2 | ## ACM金牌选手精讲算法,带你刷爆[LeetCode/LintCode](https://www.lintcode.com/?utm_source=sc-github-sy) 3 | 4 | ⭐**项目介绍**:本项目由本人耗费1年时间精心编撰,目标是通过一套完整的刷题路线和详细的题目解析,帮助大家少走弯路,攻克面试中的算法题。 5 | 6 | ⭐**本人介绍**:令狐冲,北大CS专业硕士,ACM金牌选手,前Facebook、Airbnb高级架构师,九章算法创始人。 7 | 8 | 9 | ⭐**刷题顺序**: 很多人都不知道题目该怎么刷,从何刷起,而我已经将刷题顺序整理好了,按照这里的[精选题集](https://www.lintcode.com/collection/192/?utm_source=sc-github-sy),按顺序一道一道刷就可以。 10 | 11 | ⭐**算法题解查询**:推荐一个实用且免费的**免费题解神器**:[九章刷题小助手](https://www.jiuzhang.com/problem/?utm_source=sc-github-sy)。在LeetCode/[LintCode](https://www.lintcode.com/?utm_source=sc-github-sy)刷题,一键直达3000+题解。 12 | 13 | ⭐**万能算法模板**:此外,我还整理了一套万能的算法模板,内含各类**BATJ等大厂常考算法题的使用条件、复杂度和万用模板**,在面试中遇到了就可以直接套,get算法面试“作弊”解法: 14 | 15 | 📌⼆分法 Binary Search 16 | 17 | 📌双指针 Two Pointers 18 | 19 | 📌排序算法 Sorting 20 | 21 | 📌宽度优先搜索 BFS 22 | 23 | …… 24 | 25 | ![origin_img_v2_121a3ed9-400e-4274-b7d8-5c670d808eag.png](https://upload-images.jianshu.io/upload_images/24356384-37ad5d628b42586f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 26 | 27 | 扫码添加小助手-章鱼丸,回复**关键词【Git】**,即可免费领取PDF版本! 28 | 29 | ![20220222-111506.jpg](https://upload-images.jianshu.io/upload_images/24356384-1552bfd6534ee1d1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 30 | 31 | 同时,欢迎关注我的公众号**九章算法** : 专业的北美IT求职经验分享、技术交流、大厂最新真题整理,帮助更多的程序员找到好工作。 32 | 33 | ![20220221-154912.jpg](https://upload-images.jianshu.io/upload_images/24356384-80aea596073cced2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 34 | 35 | **官网地址**:[https://www.jiuzhang.com/](https://www.jiuzhang.com/?utm_source=sc-github-sy) 36 | 37 | ## 如何使用该刷题攻略 38 | 39 | 目前准备更新大厂的高频算法知识点,包括**二分法、双指针、二叉树、动态规划、红黑树** 40 | 41 | 我在题目讲解中会使用Java和Python,这两种语言覆盖了市面上90%的工作岗位,非常经典,当然你会发现底下还有小伙伴贡献的其他题解,包括C++、Go、JavaScript等等,也欢迎大家参与进来,完善题解的各个语言版本,共同进步! 42 | 43 | ## 大厂算法题解 44 | [谷歌面试题:猜数字游戏](https://github.com/ninechapter-algorithm/LeetCode-master/blob/main/problem/%E8%B0%B7%E6%AD%8C%E9%9D%A2%E8%AF%95%E9%A2%98%EF%BC%9A%E7%8C%9C%E6%95%B0%E5%AD%97%E6%B8%B8%E6%88%8F.md) 45 | --------------------------------------------------------------------------------