Leetcode #299. Bulls and Cows
这一题简称1A2B,是一款猜数字的游戏,简单介绍一下玩法!
电脑会出一组数字,简称secret。玩家要输入一组同位数的数字,简称guess。
当玩家猜出secret就赢了,如果没猜对会回传提示。
ex1.
Input: secret = "1234", guess = "1240"
output: 2A1B
guess前面的12跟secret完全相同,我们就用2A表示,後面4的数值在secret里面也有,但位置不一样,用1B表示
ex2.
Input: secret = "1234", guess = "0000"
Output: "0A0B"
注: guess的长度跟secret相同
防雷
防雷
防雷
这一题可以用map来解~
先定义一个map,去记数字出现的次数
因为secret跟guess的长度是一样,所以我们不用去管两边长度问题。
跑一个回圈只要两边位置跟数字都相同,a++
如果不相同,判断secret的数值在map是否小於0,是的话b++,guess的数值在map是否大於0,是的话b++,最後secret的数值++,guess的数值--。
什麽意思?来看一下执行流程
ex: secret = "0011", guess = "1100"
当跑到index 2,第三个数值的时候,我们来看一下map的值。
* secret的数值在map里面都加1 guess的值都减1
map: {
0: 2
1: -2
}
secret第三个数值是1
来map里面找,发现是负值,证明guess之前的值有1,所以B+1。
最後把map[1]++,就剩下-1,并不会重复计算。
最後回圈跑完,map刚好就会清0!
回传: 0A4B
程序:
func getHint(secret string, guess string) string {
book := map[byte]int{}
var a, b int
for i := 0; i < len(secret); i++ {
sNum := secret[i]
gNum := guess[i]
if sNum == gNum {
a++
continue
}
if book[sNum] < 0 {
b++
}
if book[gNum] > 0 {
b++
}
book[sNum]++
book[gNum]--
}
return fmt.Sprintf("%vA%vB", a, b)
}
明天讲Graph~
<<: [Android Studio 30天自我挑战] 练习APP-计算BMI
>>: 要上传档案,你需要知道的事-Content-Type
Intro 这次写了一个小游戏。里面包含了前几次练习的功能,但是有些东西是用 class 来写出来,...
这篇主要是讲到静态文件,静态文件就是 CSS 、 JavaScript 与图片档之类的档案(因为在 ...
第二天装好django 然後建立了第一个专案bb後 然後我按照影片教的执行 runserver 然後...
题干懒人包 基本上跟27题很像,输入是一个已经排序好的数组,最後输出非重复数值的数量,然後以下几点要...
最近看设计相关文章时,常常会看到这四个名词,usability、accessibility、univ...