Leetcode_299_Bulls and Cows
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/50768550
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
思路:
(1)题意为给定两串数字,当中的一串数字能够看作为password,还有一串可看作为待推測的数字,将猜对了的数字(位置和数字都同样)个数记为:个数+A,将位置不正确而包括在password中的数字个数记为:个数+B。
(2)该题主要考察字符匹配问题。因为两串数字中数的个数同样,所以,对于位置同样且数字亦同样的情况。仅仅需遍历一次就能得到bull的个数;而对于位置不同且含有同样数的情况,则须要进行特殊处理以得到cow的个数。
一方面。可能某一个数在当中的某一串数中出现了多次。还有一方面,位置同样且数同样的情况也须要进行过滤。此处,创建一个Map来进行存储和过滤。当中。map的key为数串中的数,value为该数出现的次数。这样通过一次遍历就可以将数和其个数存储起来。然后再进行两次遍历,分别得到同一位置上数同样情况的个数和不同位置上数同样情况的个数,即为所求。
详情见下方代码。
(3)希望本文对你有所帮助。
谢谢。
算法代码实现例如以下:
import java.util.HashMap;
import java.util.Map; public class Bulls_and_Cows { public static void main(String[] args) {
System.err.println(getHint("1122", "1222"));
} public static String getHint(String secret, String guess) {
char[] se = secret.toCharArray();
char[] gu = guess.toCharArray(); int len = se.length;
int bull = 0;
int cow = 0; Map<Character, Integer> seHas = new HashMap<Character, Integer>();
for (int i = 0; i < len; i++) {
if (!seHas.containsKey(se[i])) {
seHas.put(se[i], 1);
} else {
seHas.put(se[i], seHas.get(se[i]) + 1);
}
} Boolean[] b = new Boolean[len];
for (int i = 0; i < len; i++) {
if (se[i] == gu[i]) {
b[i] = true;
seHas.put(gu[i], seHas.get(gu[i])-1);
cow++;
}else {
b[i] = false;
}
} for (int j = 0; j < len; j++) {
if(b[j] == false && seHas.get(gu[j])!=null && seHas.get(gu[j])>0) {
bull ++;
seHas.put(gu[j], seHas.get(gu[j])-1);
}
} return cow + "A" + bull + "B";
}
}
Leetcode_299_Bulls and Cows的更多相关文章
- [LeetCode] Bulls and Cows 公母牛游戏
You are playing the following Bulls and Cows game with your friend: You write a 4-digit secret numbe ...
- POJ 2186 Popular Cows(Targin缩点)
传送门 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31808 Accepted: 1292 ...
- POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
传送门 Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 46727 Acce ...
- LeetCode 299 Bulls and Cows
Problem: You are playing the following Bulls and Cows game with your friend: You write down a number ...
- [Leetcode] Bulls and Cows
You are playing the following Bulls and Cows game with your friend: You write a 4-digit secret numbe ...
- 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列
第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...
- POJ2186 Popular Cows [强连通分量|缩点]
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31241 Accepted: 12691 De ...
- Poj2186Popular Cows
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31533 Accepted: 12817 De ...
- [poj2182] Lost Cows (线段树)
线段树 Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacula ...
随机推荐
- Swift - 将字符串拆分成数组(把一个字符串分割成字符串数组)
在Swift中,如果需要把一个字符串根据特定的分隔符拆分(split)成字符串数组,通常有如下两种方法: 1,使用componentsSeparatedByString()方法 1 2 3 4 5 l ...
- 【转】坑爹的AsyncTask之根本停不下来
原文网址:http://www.jianshu.com/p/0c6f4b6ed558 上篇<坑爹的AsyncTask之内存泄露>已经简单的探讨过线程使用不当会造成内存泄露的问题,在Acti ...
- 架构-Eureka:第一个方法
ylbtech-架构-Eureka:第一个方法 工程介绍 Spring Cloud 工程目录 model registry-center Servers tzxyfx tzxyfx-provider ...
- php pdo具体操作
0x01:测试PDO是否安装成功 运行如下代码,如果提示参数错误,说明PDO已经安装,如果说明对象不存在,则修改PHP配置文件php.ini,取消php_pdo_yourssqlserverhere. ...
- UVA-1335(UVALive-3177) Beijing Guards 贪心 二分
题面 题意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人 ...
- sublime3 install python3
链接地址:https://blog.csdn.net/Ti__iT/article/details/78830040
- 在webstrorm中配置好es6 babel【更新:在webstorm中配置.vue和.vue文件中支持es6】
第一步:全局安装babel-cli npm install -g babel-cli 第二步,新建一个空项目,在 WebStorm 中的当前项目中打开 Terminal,进入项目的根目录下, 安装 E ...
- python3遍历选中文件夹下的文件【GUI编程】
功能介绍 如标题 使用截图 1.第一步:运行python程序 2.第二步:点击按钮选中文件夹 3.运行结束: 1. 显示选中文件夹路径 2. 遍历打印文件夹内文件 代码 import os #程序功能 ...
- Java 方法的应用
Java方法可以理解为C#中的函数,都是把复杂的问题简单化,按模块,按功能区分,分别完成各个部分在调用这些方法完成整个功能. 方法的综合练习,猜数字的实现: 代码要求: 生成不重复的4位数字(只有1- ...
- boost多线程使用简例
原文链接:http://www.cppblog.com/toMyself/archive/2010/09/22/127347.html C++ Boost Thread 编程指南 转自cnblog: ...