Algorithm
本周的 LeetCode 题目为 22. 括号生成
题目简介:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
本题使用回溯法,因为有左右两边括号,可以使用 left
,right
两个变量来分别记录左括号和右括号的次数。当左括号小于 n
时,可以加入左括号;当 right < left
时,可以加入右括号。通过的代码如下:
class Solution {
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList<>();
backtracking(new StringBuilder(), 0, 0, n, ans);
return ans;
}
public void backtracking(StringBuilder sb, int left, int right, int n, List<String> ans) {
if (left+right == 2*n) {
ans.add(sb.toString());
}
if (left < n) {
sb.append('(');
backtracking(sb, left+1, right, n, ans);
sb.deleteCharAt(sb.length() - 1);
}
if (right < left) {
sb.append(')');
backtracking(sb, left, right+1, n, ans);
sb.deleteCharAt(sb.length() - 1);
}
}
}
Review
本周 Review 的英文文章为:如何好好休息
作者在文中给出一些提高休息质量的建议:
- 改变对休息的态度。休息很重要,它将会让你更有创造力、拥有可持续的生活
- 确立明确的界限。减少在晚上和周末在工作电话和电子邮件的检查,分割开工作时间和个人时间。可以制定一个工作和休息的时间表
- 培养深度爱好。你可以寻找到新的爱好,如爬山、绘画等来作为休息
- 不要忽视睡眠和小睡
- 鼓励别人和你一起休息
Tip
StringBuffer
和 StringBuilder
的区别:StringBuffer
是线程安全的,而 StringBuilder
并不是线程安全的。
Share
感觉自己最近需要整理回顾下,来深入的反思一下自己,虽然比较稳定,但感觉又陷入了某个心理舒适区,因此需要反思一下。