7.8-Contest 40-小结
637. Average of Levels in Binary Tree
这道题比较简单,只需要对 tree 进行 level traversal 的同时,计算每层的 average value。
640. Solve the Equation
式子中没有括号,只有加减,而且最多只有一次项。把式子以 '=' 分为两部分,分别计算左式和右式的 x 的系数和常数项,然后只需要比较左右式的 x 的系数和常数项,即可得到解。需要注意式子中出现负号的情况。
此次完成了前两道题
638. Shopping Offers
可以使用 recursion 和 dynamic programming 的方式对这道题进行求解。
recursion:
1)依次选用一个 special(最多100次),然后 recursive call,最多6层
recursive call。
2)可以先算出不使用 special 的价格,然后依次尝试各种 special,如果能使价格降低就 recursive call,这样做可以做实现剪枝。
(还可以使用hashmap<needs, total>,把之前各种情况的needs作为key,花费作为value记录下来,避免重复计算。)
dynamic programming:
需要将高维 dp 转换为一维的,方便计算,而且主要是因为这里 item 的种类个数不确定,所以维度不确定。可以写 encode 和 decode 函数处理维度转换。接下来,只需要对有值的单元,进行各种尝试,求得之后单元对应的值(花费)。
639. Decode Ways II
使用 dynamic programming 的思想,分为两种情况:只以当前字符作为一个字母;以当前和前一个,这两个字符作为一个字母。只不过这道题在每种情况中,细分情况的时候需要考虑'*'。
优化:可以只使用两个变量来保存前一个,和前前一个的情况个数,用于当前的计算。时间复杂度从 O(n) 优化到 O(1)。
注意:这两个变量最好是 long ,防止溢出。