Skip to content

Commit 74a7baa

Browse files
committed
solve problem Bulls And Cows
1 parent f9d59be commit 74a7baa

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ All solutions will be accepted!
308308
|701|[Insert Into A Binary Search Tree](https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/description/)|[java/py/js](./algorithms/InsertIntoABinarySearchTree)|Medium|
309309
|165|[Compare Version Numbers](https://leetcode-cn.com/problems/compare-version-numbers/description/)|[java/py/js](./algorithms/CompareVersionNumbers)|Medium|
310310
|8|[String To Integer Atoi](https://leetcode-cn.com/problems/string-to-integer-atoi/description/)|[java/py/js](./algorithms/StringToIntegerAtoi)|Medium|
311+
|299|[Bulls And Cows](https://leetcode-cn.com/problems/bulls-and-cows/description/)|[java/py/js](./algorithms/BullsAndCows)|Medium|
311312

312313
# Database
313314
|#|Title|Solution|Difficulty|

algorithms/BullsAndCows/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Bulls And Cows
2+
We can solve this problem by hashmap

algorithms/BullsAndCows/Solution.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
public String getHint(String secret, String guess) {
3+
int bullCount = 0,
4+
cowCount = 0;
5+
Map<Character, Integer> valueMap = new HashMap<Character, Integer>();
6+
List<Character> guessRemains = new ArrayList<Character>();
7+
8+
for (int i = 0; i < secret.length(); i++) {
9+
if (secret.charAt(i) == guess.charAt(i))
10+
bullCount++;
11+
else {
12+
if (valueMap.get(secret.charAt(i)) == null)
13+
valueMap.put(secret.charAt(i), 1);
14+
else
15+
valueMap.put(secret.charAt(i), valueMap.get(secret.charAt(i)) + 1);
16+
guessRemains.add(guess.charAt(i));
17+
}
18+
}
19+
20+
for (int i = 0; i < guessRemains.size(); i++) {
21+
char c = guessRemains.get(i);
22+
Integer v = valueMap.get(c);
23+
if (v != null && v > 0) {
24+
cowCount++;
25+
valueMap.put(c, v - 1);
26+
}
27+
}
28+
29+
return String.format("%dA%dB", bullCount, cowCount);
30+
}
31+
}

algorithms/BullsAndCows/solution.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {string} secret
3+
* @param {string} guess
4+
* @return {string}
5+
*/
6+
var getHint = function(secret, guess) {
7+
let bullCount = 0,
8+
cowCount = 0,
9+
valueMap = {},
10+
guessRemains = []
11+
12+
for (let i = 0; i < secret.length; i++) {
13+
if (secret[i] == guess[i])
14+
bullCount++
15+
else {
16+
if (valueMap[secret[i]] === undefined)
17+
valueMap[secret[i]] = 0
18+
valueMap[secret[i]]++
19+
guessRemains.push(guess[i])
20+
}
21+
}
22+
23+
guessRemains.forEach(v => {
24+
if (valueMap[v] !== undefined && valueMap[v] > 0) {
25+
cowCount++
26+
valueMap[v]--
27+
}
28+
})
29+
30+
return `${bullCount}A${cowCount}B`
31+
};

algorithms/BullsAndCows/solution.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution(object):
2+
def getHint(self, secret, guess):
3+
"""
4+
:type secret: str
5+
:type guess: str
6+
:rtype: str
7+
"""
8+
bull_count = 0
9+
cow_count = 0
10+
value_map = {}
11+
guess_remains = []
12+
13+
for i in xrange(len(secret)):
14+
if secret[i] == guess[i]:
15+
bull_count += 1
16+
else:
17+
value_map[secret[i]] = 1 if value_map.get(secret[i]) == None else value_map.get(secret[i]) + 1
18+
guess_remains.append(guess[i])
19+
20+
for v in guess_remains:
21+
if value_map.get(v) != None and value_map.get(v) > 0:
22+
cow_count += 1
23+
value_map[v] -= 1
24+
25+
return '%dA%dB' % (bull_count, cow_count)

0 commit comments

Comments
 (0)