每週一個 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: 價值觀
最近體會交付的含義是:能夠保證沒有任何問題地讓功能上線。
有一個功能做了比較久,年前就開始,一直到今天還在跑測試。中間經過一次需求的大修改,最近一週又頻繁調整需求,導致我這一週加了兩天班,結果本應該下週交付的功能到現在還有無法上線的風險。
應當採取的態度是過程中及時跟進,有大調整要跟組長及時反饋,不能等最後一週再去反饋問題。