【一天一道LeetCode】#299. Bulls and Cows
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
You are playing the following Bulls and Cows game with your friend: You write down a number and ask your friend to guess what the number is. Each time your >friend makes a guess, you provide a hint that indicates how many digits in said guess match your secret number exactly in both digit and position (called >”bulls”) and how many digits match the secret number but locate in the wrong position (called “cows”). Your friend will use successive guesses and hints to >eventually derive the secret number.
For example:
Secret number: “1807”
Friend’s guess: “7810”Hint: 1 bull and 3 cows. (The bull is 8, the cows are 0, 1 and 7.)
Write a function to return a hint according to the secret number and friend’s guess, use A to indicate the bulls and B to indicate the cows. In the above >example, your function should return “1A3B”.Please note that both secret number and friend’s guess may contain duplicate digits, for example:
Secret number: “1123”
Friend’s guess: “0111”In this case, the 1st 1 in friend’s guess is a bull, the 2nd or 3rd 1 is a cow, and your function should return “1A1B”.
You may assume that the secret number and your friend’s guess only contain digits, and their lengths are always equal.
来源: https://leetcode.com/problems/bulls-and-cows/
(二)解题
题目大意:给定两个string变量a和b,bulls表示a和b相同位上有相同数的个数,cows表示a和b不同位上有相同数的个数。注意计算过的不能再算。 
解题思路:分为两类来计算,如1807和7810 
(1)相同位上有相同数(8,8) 
直接统计这样的位数即可 
(2)相同位上有不同数(107和710) 
先统计每个数出现  
具体思路见代码注释:
class Solution {
public:
    string getHint(string secret, string guess) {
        int hash[10] = {0};//0~9在secret出现的次数
        int len = secret.length();
        int countA = 0 ,countB=0;
        int *isFind = new int[len];//统计那些位上的数相同
        memset(isFind,0,len*sizeof(int));
        for(int i =0 ; i < len ;i++)
        {
            if(secret[i]==guess[i]){//相同位上有相同数
                isFind[i] = 1;
                countA++;
            }
            else hash[secret[i]-'0']++;//如果相同位上数不相等就记录下来
        }
        for(int i =0 ; i < len ;i++)
        {
            if(isFind[i]==0){//跳过相同位上有相同数
                if(hash[guess[i]-'0']!=0)//如果出现过
                {
                    hash[guess[i]-'0']--;//次数减1
                    countB++;
                }
            }
        }
        string ret;
        stringstream ss;
        ss<<countA;
        ss<<'A';
        ss<<countB;
        ss<<'B';
        ss>>ret;//按特定格式输出
        return ret;
    }
};
【一天一道LeetCode】#299. Bulls and Cows的更多相关文章
- LeetCode 299 Bulls and Cows
		
Problem: You are playing the following Bulls and Cows game with your friend: You write down a number ...
 - [leetcode]299. Bulls and Cows公牛和母牛
		
You are playing the following Bulls and Cows game with your friend: You write down a number and ask ...
 - Leetcode 299 Bulls and Cows 字符串处理 统计
		
A就是统计猜对的同位同字符的个数 B就是统计统计猜对的不同位同字符的个数 非常简单的题 class Solution { public: string getHint(string secret, s ...
 - 【LeetCode】299. Bulls and Cows 解题报告(Python)
		
[LeetCode]299. Bulls and Cows 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题 ...
 - 299. Bulls and Cows - LeetCode
		
Question 299. Bulls and Cows Solution 题目大意:有一串隐藏的号码,另一个人会猜一串号码(数目相同),如果号码数字与位置都对了,给一个bull,数字对但位置不对给一 ...
 - 299.	Bulls and Cows
		
题目: You are playing the following Bulls and Cows game with your friend: You write down a number and ...
 - 299 Bulls and Cows 猜数字游戏
		
你正在和你的朋友玩猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜.每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为”Bulls“, 公牛),有多少位数字 ...
 - Java [Leetcode 229]Bulls and Cows
		
题目描述: You are playing the following Bulls and Cows game with your friend: You write down a number an ...
 - LeetCode(45)-Bulls and Cows
		
题目: You are playing the following Bulls and Cows game with your friend: You write down a number and ...
 
随机推荐
- hdu  1133 Buy the Ticket(Catalan)
			
Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
 - [4.14校内训练赛by hzwer]
			
来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi.... 很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...
 - Mac上安装brew 包管理工具
			
Mac 上的包管理工具对于开发者来说是一件非常方便的工具,能够有效的对包进行管理. 所以这篇博客就来简单的讲一下brew 的安装和一些基础命令. brew 全称叫做Homebrew . 1. 首先来说 ...
 - ArrayList add方法的实现之扩容
			
初探ArrayList的1.5倍扩容 add方法是通过在list的尾部追加元素的方法,添加数据的. 其中,调用了一个叫ensureCapacityInternal方法,实现list的容量换算等: 注意 ...
 - JFinal 极速开发框架的优点和不足的地方
			
http://www.360doc.com/content/16/1226/10/31460730_617731802.shtml http://www.sohu.com/a/122571150_46 ...
 - Redis实现单点登录
			
http://blog.csdn.net/WuCourage/article/details/77802812
 - Go 实现字符串相似度计算函数 Levenshtein 和 SimilarText
			
[转]http://www.syyong.com/Go/Go-implements-the-string-similarity-calculation-function-Levenshtein-and ...
 - 07_Linux目录文件操作命令4解压缩,文件查找_我的Linux之路
			
这一节还是一样学习操作目录文件的命令 在这一节,我会讲到解压压缩tar以及zip命令,以及文本查找命令grep tar 打包压缩命令 tar命令可以为linux的文件和目录创建档案 首先要弄清两个概念 ...
 - 自定义alert窗口样式
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 解决Spring Boot 使用RedisTemplate 存储键值出现乱码 \xac\xed\x00\x05t\x00
			
spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化解决方法 ...