1367. Linked List in Binary Tree
Analysis
判断链表序列是否存在于树的路径中。
Code
先用官方题解的思路水过去了...
1 | class Solution { |
em,现在再来把这个题做一下。
第一眼看到这个题目的时候,想到的做法其实是先求出所有叶结点的路径,然后再判断链表序列是不是路径的子串即可。可惜,忘记路径怎么求的了。所以,又重新做了一下另外一个题:257. Binary Tree Paths。做完这个题之后,就可以再按照这个思路来做了。
PS:因为路径可以通过 bfs 和 dfs 来求,所以也写出类似的思路吧。
dfs:
1 | class Solution { |
虽然可以通过,但是时间消耗跟内存消耗实在是惨不忍睹了...
bfs:
1 | class Solution { |
用 bfs 消耗的时间会比上面的 dfs 要少(尽管依然惨不忍睹),因为使用 bfs 并不是一定要求出所有的路径,只需要判断当前得到的树的结点序列是否包含了链表序列即可。
现在回头来想一下官方题解中用到的方法,实际是就是 dfs 求结点路径的同时遍历链表,这样时间消耗才会降低。
43. Multiply Strings
Analysis
大数乘法,按照列算式做乘法的规则,算出每一位与另外一个数的积,然后依次加起来就可以得到最后结果了。
做这个题的同时算是把大数加法也复习了一下。
Code
method 1
1 | class Solution { |
字符串相加的函数是这个题:415. Add Strings。
做完 415 之后,又把这个题重新做了一下,思路上没有什么变化,只是按照自己的风格写了下:
1 | class Solution { |
按照前面提到的,这种方法本质上是在做加法。
method 2
看了一下官方解法的第二种方法,本质上是先转换为数组,然后进行乘法运算。具体的计算过程其实与做加法是差不多的,只是在处理每一位与另一个数的每一位相乘的结果时,做了一点优化。
按照乘法的计算规则,每次运算得到的结果在最后结果的哪一位(十、百、千位等)上是可以确定,所以直接累加起来就好了,而且这个数字肯定是不大于 100 的,但可能是 2 位数或 1 位数。
然后再统一处理进位,就会比较方便。
最后就是把每一位数字转换为字符了。
还有一点要注意的是,一个 m 位数和一个 n 位数,二者的结果一定是一个 m + n - 1 位数或 m + n 位数,也就是说结果的长度最多不超过 m + n。
1 | class Solution { |
Summary
今天的两个题都是水过去的😑,明天还有点事,早点睡了,后面再补吧...
2022-5-5 23:50 补了下第二个题。
2022-5-6 21:04 补了下第一个题。