7.8-Contest 40-小结

2017-07-28  本文已影响0人  Get_it

637. Average of Levels in Binary Tree

这道题比较简单,只需要对 tree 进行 level traversal 的同时,计算每层的 average value。

640. Solve the Equation

式子中没有括号,只有加减,而且最多只有一次项。把式子以 '=' 分为两部分,分别计算左式和右式的 x 的系数和常数项,然后只需要比较左右式的 x 的系数和常数项,即可得到解。需要注意式子中出现负号的情况。

此次完成了前两道题

638. Shopping Offers

可以使用 recursiondynamic 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 ,防止溢出。

上一篇下一篇

猜你喜欢

热点阅读