Algorithm
leetcode 112: Path Sum
public boolean hasPathSum(TreeNode node, int sum) {
if(node == null) return false;
if(node.val == sum && node.left == null && node.right == null) return true;
return hasPathSum(node.left, sum - node.val) ||
hasPathSum(node.right, sum - node.val);
}
leetcode 113: Path Sum II
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> list = new ArrayList<>();
pathSum(root, sum, result, list);
return result;
}
private void pathSum(TreeNode node, int sum, List<List<Integer>> result, List<Integer> list) {
if (node == null) return ;
list.add(node.val);
if (node.val == sum && node.left == null && node.right == null) {
result.add(new ArrayList(list));
list.remove(list.size() - 1);
return ;
}
pathSum(node.left, sum - node.val, result, list);
pathSum(node.right, sum - node.val, result, list);
list.remove(list.size() - 1);
}
leetcode 437 Path Sum III
public int pathSum(TreeNode node, int sum) {
if(node == null) return 0;
return pathSum(node.left, sum) + pathSum(node.right, sum) + pathSumFrom(node, sum);
}
private int pathSumFrom(TreeNode node, int sum) {
if(node == null) return 0;
return (node.val == sum ? 1 : 0) + pathSumFrom(node.left, sum - node.val) + pathSumFrom(node.right, sum - node.val);
}
Review
这是 Quora 上的一个帖子 What are some of the most basic things every programmer should know?。里面讨论了程序员都应该知道的一些常识,我摘录了一些在下面。
- If it's not tested, it doesn't work.
- Don't reinvent the wheel, library code is there to help.
- Code that's hard to understand is hard to maintain.
- Code that's hard to maintain is next to useless.
- Magic numbers are bad.
- If there is a bug, the user will find it.
- A code review is not a criticism.
- Eat your own dog food — fixing bugs in your own code helps you code better and improves your understanding.
- Fewer features for better code is always the right answer in the end.
- There’s always a better way.
Tip
在 github 上删除一个仓库。
进入你要删除的 Repository --> Settings --> Danger Zone --> Delete this repository.
Share
人和计算机很相似。
计算机设备有好坏之分,人也一样。所以我们需要坚持锻炼。
计算机最核心的组成有三部分:输入,计算,输出。人也一样,所以我们需要读书,思考和输出。
输入的数据并不一定都正确,可能会有脏数据,所以需要清理。读书也一样,书有好坏之分,一定要读好书。坏书无益,反而有害,就像脏数据会影响最终结果一样。
对同一个问题的求解,不同算法的效率可能有天壤之别。对应于人呢,就是不同的知识架构、不同的思考模式之间的效率也会有很大的区别。而且在算法中,我们往往可以用空间换取时间。所以,你的知识储备对思考的效率也会有很大的影响。
扫描二维码关注公众号,回复:
7095581 查看本文章
计算机需要向人类展示它们计算的结果,或者告知一个答案,或者方便人类修订程序。人也一样,需要向世人展示自己思考的结果。或者告诉世人答案,或者和其他人交流思想。