每週學算法/讀英文/知識點心得分享 3.4 - 3.8

 每週一個 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: 價值觀

最近體會交付的含義是:能夠保證沒有任何問題地讓功能上線。

有一個功能做了比較久,年前就開始,一直到今天還在跑測試。中間經過一次需求的大修改,最近一週又頻繁調整需求,導致我這一週加了兩天班,結果本應該下週交付的功能到現在還有無法上線的風險。

應當採取的態度是過程中及時跟進,有大調整要跟組長及時反饋,不能等最後一週再去反饋問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章