Coding Practice,48天强训(6)

这几天做算法做的腰酸背疼的,每张卷子连学带复习带做都是6h起步,做题同时还得不断复习原来的知识结构,由思路转换为工程能力的过程真的是异常痛苦啊,但是继续加油吧,还是教员的那一句话——坚持数年,方有成效,什么事儿都怕持之以恒。

Topic 1:大数加法

解决大数问题有一个基本要求,了解string特性以及数的位、进位操作

对于加法来说,解决思路相对简单,模拟竖式加法的过程,每位相加,保持十进制过9进位的性质即可

这示例2谁写啊,太臭了!(恼)

总体比较简单

Topic 2:链表相加

加法需要从尾部开始倒着进位处理,所以需要让其逆置,从这里用两种方法来解决这个问题,一是使用反转链表来处理,二用栈结构来处理

方法一:逆置链表

整体比较简单,主要考验链表的熟练度,很久没有复习链表,遗忘很多,部分细节仍需练习;

还要注意一个问题就是内存释放的问题,为什么结果这里只delete dummy一个节点,为什么不释放结果链表,因为dummy作为占位头节点的作用已经完成,不会再使用了,而结果链表是函数的返回值,应该由调用者负责管理其内存,调用者在使用完结果链表后,需要遍历链表并逐个释放节点。

方法二:栈模拟

我还是比较喜欢这个版本,清晰又优雅,略带一些小理解,是否也能给我们一些启示,处理需要reverse的问题,是否都能考虑使用栈的特性(Last In, First out)来实现?

Topic 3:大数乘法

同leetcode43 字符串相乘

当然这是比较基础的解法,想成为高手的话,不仅需要熟练掌握基础的使用,在此基础上我们还可以扩展使用快速傅里叶变换(FFT)来解决问题,这样的话能够使整体时间复杂度从On² 降为Onlogn,等之后有时间再来搞定进阶使用(数学真头疼呀)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值