1
akking 2017-02-16 12:56:31 +08:00
我觉得你想问的是 backtracking 的原理吧?
凭空想的确挺难的, 多做题就好了 |
2
zhy0216 2017-02-16 14:32:46 +08:00
@akking 这题没有用到 backtracking 吧?
我比较喜欢这个答案 https://discuss.leetcode.com/topic/69803/easy-to-understand-python-code |
3
yongzhong OP @zhy0216 这个解法看上去比较清晰,但仍然不是最优解,耗时达到了 200 多 ms.而且这个解法的思路也还是通过 result.count(sum)去判断是否相等,和上面提到的那个解法不太一样
|
4
zhy0216 2017-02-17 02:12:12 +08:00
我觉得是一样, 我改了下代码, 逻辑是一致的, 就是从数组->dict:
```python def helper(self, root, sum): from collections import defaultdict if not root: return None result = defaultdict(int) result[root.val] += 1 left, right = self.helper(root.left, sum), self.helper(root.right, sum) if left: for key in left: result[key+root.val] += left[key] if right: for key in right: result[key+root.val] += right[key] self.count += result[sum] return result ``` 不过不知怎么, 速度更慢了 |
5
zhy0216 2017-02-17 02:13:52 +08:00
上面的结构不好~~
http://pastebin.com/t8iTe6WB |