mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-08 02:15:01 +08:00
add: leetcode 0299 solution
This commit is contained in:
31
leetcode/0299.Bulls-and-Cows/299.Bulls and Cows.go
Normal file
31
leetcode/0299.Bulls-and-Cows/299.Bulls and Cows.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package leetcode
|
||||||
|
|
||||||
|
import "strconv"
|
||||||
|
|
||||||
|
func getHint(secret string, guess string) string {
|
||||||
|
cntA, cntB := 0, 0
|
||||||
|
mpS := make(map[byte]int)
|
||||||
|
var strG []byte
|
||||||
|
n := len(secret)
|
||||||
|
var ans string
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
if secret[i] == guess[i] {
|
||||||
|
cntA++
|
||||||
|
} else {
|
||||||
|
mpS[secret[i]] += 1
|
||||||
|
strG = append(strG, guess[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, v := range strG {
|
||||||
|
if _, ok := mpS[v]; ok {
|
||||||
|
if mpS[v] > 1 {
|
||||||
|
mpS[v] -= 1
|
||||||
|
} else {
|
||||||
|
delete(mpS, v)
|
||||||
|
}
|
||||||
|
cntB++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ans += strconv.Itoa(cntA) + "A" + strconv.Itoa(cntB) + "B"
|
||||||
|
return ans
|
||||||
|
}
|
56
leetcode/0299.Bulls-and-Cows/299.Bulls and Cows_test.go
Normal file
56
leetcode/0299.Bulls-and-Cows/299.Bulls and Cows_test.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package leetcode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type question299 struct {
|
||||||
|
para299
|
||||||
|
ans299
|
||||||
|
}
|
||||||
|
|
||||||
|
// para 是参数
|
||||||
|
type para299 struct {
|
||||||
|
secret string
|
||||||
|
guess string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ans 是答案
|
||||||
|
type ans299 struct {
|
||||||
|
ans string
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Problem299(t *testing.T) {
|
||||||
|
|
||||||
|
qs := []question299{
|
||||||
|
|
||||||
|
{
|
||||||
|
para299{"1807", "7810"},
|
||||||
|
ans299{"1A3B"},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
para299{"1123", "0111"},
|
||||||
|
ans299{"1A1B"},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
para299{"1", "0"},
|
||||||
|
ans299{"0A0B"},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
para299{"1", "1"},
|
||||||
|
ans299{"1A0B"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("------------------------Leetcode Problem 299------------------------\n")
|
||||||
|
|
||||||
|
for _, q := range qs {
|
||||||
|
_, p := q.ans299, q.para299
|
||||||
|
fmt.Printf("【input】:%v 【output】:%v\n", p, getHint(p.secret, p.guess))
|
||||||
|
}
|
||||||
|
fmt.Printf("\n\n\n")
|
||||||
|
}
|
77
leetcode/0299.Bulls-and-Cows/README.md
Normal file
77
leetcode/0299.Bulls-and-Cows/README.md
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# [299. Bulls and Cows](https://leetcode-cn.com/problems/bulls-and-cows/)
|
||||||
|
|
||||||
|
|
||||||
|
## 题目
|
||||||
|
|
||||||
|
You are playing the Bulls and Cows game with your friend.
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
The number of "bulls", which are digits in the guess that are in the correct position.
|
||||||
|
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.
|
||||||
|
Given the secret number secret and your friend's guess guess, return the hint for your friend's guess.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: secret = "1807", guess = "7810"
|
||||||
|
Output: "1A3B"
|
||||||
|
Explanation: Bulls are connected with a '|' and cows are underlined:
|
||||||
|
"1807"
|
||||||
|
|
|
||||||
|
"7810"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: secret = "1123", guess = "0111"
|
||||||
|
Output: "1A1B"
|
||||||
|
Explanation: Bulls are connected with a '|' and cows are underlined:
|
||||||
|
"1123" "1123"
|
||||||
|
| or |
|
||||||
|
"0111" "0111"
|
||||||
|
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.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 3:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: secret = "1", guess = "0"
|
||||||
|
Output: "0A0B"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 4:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: secret = "1", guess = "1"
|
||||||
|
Output: "1A0B"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
- 1 <= secret.length, guess.length <= 1000
|
||||||
|
- secret.length == guess.length
|
||||||
|
- secret and guess consist of digits only.
|
||||||
|
|
||||||
|
## 题目大意
|
||||||
|
|
||||||
|
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
|
||||||
|
|
||||||
|
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
|
||||||
|
|
||||||
|
猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛),
|
||||||
|
有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
|
||||||
|
给你一个秘密数字secret 和朋友猜测的数字guess ,请你返回对朋友这次猜测的提示。
|
||||||
|
|
||||||
|
提示的格式为 "xAyB" ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B表示奶牛。
|
||||||
|
|
||||||
|
请注意秘密数字和朋友猜测的数字都可能含有重复数字。
|
||||||
|
|
||||||
|
## 解题思路
|
||||||
|
|
||||||
|
- 计算下标一致并且对应下标的元素一致的个数,即x
|
||||||
|
- secret和guess分别去除x个公牛的元素,剩下secret和guess求共同的元素个数就是y
|
||||||
|
- 把x, y转换成字符串,分别与"A"和"B"进行拼接返回结果
|
Reference in New Issue
Block a user