每周一个 Algorithm,Review 一篇英文文章,总结一个工作中的技术 Tip,以及 Share 一个传递价值观的东西!
Algorithm: 学习算法
题目:Generate Parentheses
题目大意:给出n对小括号,求出括号匹配的情况,用列表存储并返回,例如:n=3时,答案应为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
解题过程:题目要求给出所有可能的组合,优先考虑递归法,递归终止条件是 字符长度达到 n × 2。考虑只有左右括号两种字符,考虑递归情况:
当左括号数量小于n(这好理解,n对括号需要n个左括号),添加左括号。
当右括号数量小于左括号数量(为什么不是小于n?因为这是无效情形),添加右括号。
还有其他情况吗?考虑下边界情况, 似乎没有了。
自己写一写测试用例验证结果。
解法:
class Solution { public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<>(); if (n > 0) { traceback(result, 0, 0, "", n); } return result; } /** * find all possible solutions * @param result * @param left total left parentheses * @param right total right parentheses * @param out current output * @param max max */ private void traceback(List<String> result, int left, int right, String out, int max) { if (out.length() == max * 2) { result.add(out); return; } if (left < max) { traceback(result, left + 1, right, out + "(", max); } if (right < left) { traceback(result, left, right + 1, out + ")", max); } } }
Review: 学习英文
无,暂没想到想读的英文材料,博客?技术文章?小说?
Tips: 知识点
Java Ring Buffer 原理及实现 http://tutorials.jenkov.com/java-performance/ring-buffer.html
这是之前读消息队列里的基础知识之一,用Java实现了两种方式的ring buffer,个人喜欢第一种 Fill Count 的方式,比较巧妙。
Share: 价值观
最近体会交付的含义是:能够保证没有任何问题地让功能上线。
有一个功能做了比较久,年前就开始,一直到今天还在跑测试。中间经过一次需求的大修改,最近一周又频繁调整需求,导致我这一周加了两天班,结果本应该下周交付的功能到现在还有无法上线的风险。
应当采取的态度是过程中及时跟进,有大调整要跟组长及时反馈,不能等最后一周再去反馈问题。
原文地址:https://www.cnblogs.com/andrew-chen/p/10497471.html
时间: 2024-10-27 13:46:47