【刷题日记】682. 棒球比赛
本次刷题日记的第 11 篇,力扣题为:682. 棒球比赛 ,简单
一、题目描述:
这个题文字描述有点多,不过逻辑还是比较简单的,慢慢多刷几个题之后,我们就能更好的耐着性子来看看题目所表达的含义了,虽然题目是简单题,但是我们也不能放过,每一道题,都会有我们值得学习的地方,每一个人身上也总是会有发光的点
二、思路分析:
1、这道题考察了什么思想?你的思路是什么?
这道题仔细阅读后,题意还是非常明确的,我们需要注意题目中给出的规则
对于 “+” ,“D” ,“C” 以及正常整数的运算逻辑需要处理好,其他的没啥,思路如下:
- 遍历一次题目给出的 ops 操作数数组,对于不同的字符,我们将其翻译成对应的数字,用一个 help 数组来记录,实时结果用 res 来记录
- 按照逻辑将数字累加,最终得出结论
我们只需要按照所给的字符进行一步一步的模拟就可以将结果模拟出来,没有什么隐藏的注意事项,我们还是以题目中给出的示例来演示一遍:
示例1 : ops = ["5","2","C","D","+"]
我们可以看到,正常的模拟下来,就是一个数学题,注意 C , D , + 这三个字符的特殊含义及对应的特殊逻辑
引入了一个帮助记录的 help 数组,记录我们的结果集
三、编码
根据上述逻辑和分析,我们就可以翻译成如下代码,就按照咱们数学的方式来处理即可
编码如下:
func calPoints(ops []string) (res int) { helper := []int{} for _, op := range ops { n := len(helper) switch op { case "+": res += helper[n-1] + helper[n-2] helper = append(helper, helper[n-1]+helper[n-2]) case "D": res += helper[n-1] * 2 helper = append(helper, 2*helper[n-1]) case "C": res -= helper[n-1] helper = helper[:len(helper)-1] default: pt, _ := strconv.Atoi(op) res += pt helper = append(helper, pt) } } return }
看实际编码也是非常基础的,主要是对字符的判断,以及对应逻辑的实现,实现的话则是在数组的操作上面进行处理
四、总结:
本题比较简单,主要是换换脑袋,时间复杂度是 O(n) , 空间复杂度是 O(n)
本题是给出了一些很确切的定义,并没有让我们处理异常情况
可以实际工程代码中,不得不考虑各种异常情况来保证程序的鲁棒性,需要分析好每一种出现的可能以及场景,来将不同可能的场景进行分类,统一梳理,制定解决方案,输出设计,编码等等
不过我们可以从简单题开始刷起,涨涨信心
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~