Day. 15 Bulls and Cows

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

Day 29 - 这个游戏制作人疯了吧

Intro 这次写了一个小游戏。里面包含了前几次练习的功能,但是有些东西是用 class 来写出来,...

Day 17 Flask 静态文件

这篇主要是讲到静态文件,静态文件就是 CSS 、 JavaScript 与图片档之类的档案(因为在 ...

乾卡住

第二天装好django 然後建立了第一个专案bb後 然後我按照影片教的执行 runserver 然後...

[用 Python 解 LeetCode] (002) 26. Remove Duplicates from Sorted Array

题干懒人包 基本上跟27题很像,输入是一个已经排序好的数组,最後输出非重复数值的数量,然後以下几点要...

易用性、无障碍、通用、包容性设计 — part1

最近看设计相关文章时,常常会看到这四个名词,usability、accessibility、univ...