Skip to content

Commit e6fd627

Browse files
committed
add: leetcode 0299 solution
1 parent df54373 commit e6fd627

File tree

3 files changed

+164
-0
lines changed

3 files changed

+164
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package leetcode
2+
3+
import "strconv"
4+
5+
func getHint(secret string, guess string) string {
6+
cntA, cntB := 0, 0
7+
mpS := make(map[byte]int)
8+
var strG []byte
9+
n := len(secret)
10+
var ans string
11+
for i := 0; i < n; i++ {
12+
if secret[i] == guess[i] {
13+
cntA++
14+
} else {
15+
mpS[secret[i]] += 1
16+
strG = append(strG, guess[i])
17+
}
18+
}
19+
for _, v := range strG {
20+
if _, ok := mpS[v]; ok {
21+
if mpS[v] > 1 {
22+
mpS[v] -= 1
23+
} else {
24+
delete(mpS, v)
25+
}
26+
cntB++
27+
}
28+
}
29+
ans += strconv.Itoa(cntA) + "A" + strconv.Itoa(cntB) + "B"
30+
return ans
31+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type question299 struct {
9+
para299
10+
ans299
11+
}
12+
13+
// para 是参数
14+
type para299 struct {
15+
secret string
16+
guess string
17+
}
18+
19+
// ans 是答案
20+
type ans299 struct {
21+
ans string
22+
}
23+
24+
func Test_Problem299(t *testing.T) {
25+
26+
qs := []question299{
27+
28+
{
29+
para299{"1807", "7810"},
30+
ans299{"1A3B"},
31+
},
32+
33+
{
34+
para299{"1123", "0111"},
35+
ans299{"1A1B"},
36+
},
37+
38+
{
39+
para299{"1", "0"},
40+
ans299{"0A0B"},
41+
},
42+
43+
{
44+
para299{"1", "1"},
45+
ans299{"1A0B"},
46+
},
47+
}
48+
49+
fmt.Printf("------------------------Leetcode Problem 299------------------------\n")
50+
51+
for _, q := range qs {
52+
_, p := q.ans299, q.para299
53+
fmt.Printf("【input】:%v 【output】:%v\n", p, getHint(p.secret, p.guess))
54+
}
55+
fmt.Printf("\n\n\n")
56+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# [299. Bulls and Cows](https://leetcode-cn.com/problems/bulls-and-cows/)
2+
3+
4+
## 题目
5+
6+
You are playing the Bulls and Cows game with your friend.
7+
8+
You write down a secret number and ask your friend to guess what the number is. When your friend makes a guess, you provide a hint with the following info:
9+
10+
The number of "bulls", which are digits in the guess that are in the correct position.
11+
The number of "cows", which are digits in the guess that are in your secret number but are located in the wrong position. Specifically, the non-bull digits in the guess that could be rearranged such that they become bulls.
12+
Given the secret number secret and your friend's guess guess, return the hint for your friend's guess.
13+
14+
The hint should be formatted as "xAyB", where x is the number of bulls and y is the number of cows. Note that both secret and guess may contain duplicate digits.
15+
16+
**Example 1:**
17+
18+
```
19+
Input: secret = "1807", guess = "7810"
20+
Output: "1A3B"
21+
Explanation: Bulls are connected with a '|' and cows are underlined:
22+
"1807"
23+
|
24+
"7810"
25+
```
26+
27+
**Example 2:**
28+
29+
```
30+
Input: secret = "1123", guess = "0111"
31+
Output: "1A1B"
32+
Explanation: Bulls are connected with a '|' and cows are underlined:
33+
"1123" "1123"
34+
| or |
35+
"0111" "0111"
36+
Note that only one of the two unmatched 1s is counted as a cow since the non-bull digits can only be rearranged to allow one 1 to be a bull.
37+
```
38+
39+
**Example 3:**
40+
41+
```
42+
Input: secret = "1", guess = "0"
43+
Output: "0A0B"
44+
```
45+
46+
**Example 4:**
47+
48+
```
49+
Input: secret = "1", guess = "1"
50+
Output: "1A0B"
51+
```
52+
53+
**Constraints:**
54+
55+
- 1 <= secret.length, guess.length <= 1000
56+
- secret.length == guess.length
57+
- secret and guess consist of digits only.
58+
59+
## 题目大意
60+
61+
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
62+
63+
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
64+
65+
猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛),
66+
有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
67+
给你一个秘密数字secret 和朋友猜测的数字guess ,请你返回对朋友这次猜测的提示。
68+
69+
提示的格式为 "xAyB" ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B表示奶牛。
70+
71+
请注意秘密数字和朋友猜测的数字都可能含有重复数字。
72+
73+
## 解题思路
74+
75+
- 计算下标一致并且对应下标的元素一致的个数,即x
76+
- secret和guess分别去除x个公牛的元素,剩下secret和guess求共同的元素个数就是y
77+
- 把x, y转换成字符串,分别与"A"和"B"进行拼接返回结果

0 commit comments

Comments
 (0)