每周学算法/读英文/知识点心得分享 3.4

 每周一个 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