博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Bulls and Cows
阅读量:5937 次
发布时间:2019-06-19

本文共 3314 字,大约阅读时间需要 11 分钟。

You are playing the following Bulls and Cows game with your friend: You write a 4-digit secret number and ask your friend to guess it. Each time your friend guesses a number, you give a hint. The hint tells your friend how many digits are in the correct positions (called “bulls”) and how many digits are in the wrong positions (called “cows”). Your friend will use those hints to find out 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. 扫描secret字符串,记录各个字符的个数。
  2. 扫描两遍guess字符串:
    ①第一遍记录字符正确且位置也正确的字符。
    ②第二遍记录字符正确但位置不正确的字符。

实现代码

C++:

// Runtime: 20msclass Solution {public:    string getHint(string secret, string guess) {        unordered_map
mymap; vector
tag(secret.size(), false); for (int i = 0; i < secret.size(); i++) { mymap[secret[i]]++; } int cntA = 0; int cntB = 0; for (int i = 0; i < guess.size(); i++) { if (secret[i] == guess[i]) { ++cntA; tag[i] = true; mymap[guess[i]]--; } } for (int i = 0; i < guess.size(); i++) { if (!tag[i] && mymap[guess[i]] > 0) { cntB++; mymap[guess[i]]--; } } return to_string(cntA) + "A" + to_string(cntB) + "B"; }private: string to_string(int n) { if (n == 0) { return "0"; } string res = ""; while (n) { res += n % 10 + '0'; n /= 10; } reverse(res.begin(), res.end()); return res; }};

Java:

// Runtime: 18mspublic class Solution {    public String getHint(String secret, String guess) {        Map
map = new HashMap
(); boolean tag[] = new boolean[secret.length()]; for (int i = 0; i < secret.length(); i++) { if (map.containsKey(secret.charAt(i))) { map.replace(secret.charAt(i), map.get(secret.charAt(i)) + 1); } else { map.put(secret.charAt(i), 1); } } int a = 0, b = 0; for (int i = 0; i < guess.length(); i++) { if(secret.charAt(i) == guess.charAt(i)) { ++a; map.replace(guess.charAt(i), map.get(guess.charAt(i)) - 1); tag[i] = true; } } for (int i = 0; i < guess.length(); i++) { if (!tag[i] && map.containsKey(guess.charAt(i)) && map.get(guess.charAt(i)) > 0) { ++b; map.replace(guess.charAt(i), map.get(guess.charAt(i)) - 1); } } return a + "A" + b + "B"; }}

转载地址:http://lcntx.baihongyu.com/

你可能感兴趣的文章
大佬 都赞不绝口的 “宅男程序员之作”,竟如此精辟!
查看>>
人工智能推动人机交互创新 三星Bixby中文(普通话)版正式发布
查看>>
数据挖掘中的十大实用分析方法
查看>>
插入排序就这么简单
查看>>
Swift iOS : YYText计算文字占用高度
查看>>
【1分钟知识点】利用「占位块」弥补 space-between 的不足
查看>>
使用 redux-observable 实现组件自治
查看>>
构建你的第一个Flutter视频通话应用
查看>>
React之setState
查看>>
Laravel 5.7 正式发布,同时启动中文翻译
查看>>
SpringBoot项目远程Debug模式(Eclipse)
查看>>
前端性能优化之http请求的过程
查看>>
Vscode 扩展开发实践 jump源码分析
查看>>
2017 Material design 第二章第四节《Material的变化》
查看>>
ajax中的suceess函数使用this
查看>>
Java类集框架 —— ArrayList源码分析
查看>>
[译] 使用 Node 和 OAuth 2.0 构建一个简单的 REST API
查看>>
程序员月薪多少,才能在北上广买得起房?
查看>>
老司机 iOS 周报 #2
查看>>
CardView源码解析-View阴影
查看>>