【LeetCode】 22. 生成括号 回溯 JAVA

谁借莪1个温暖的怀抱¢ 2021-06-10 20:38 336阅读 0赞

题目

题目传送门:传送门(点击此处)
在这里插入图片描述

题解

其实这道题目还是有难度的,如果没有放在回溯模块儿下,很难想到使用回溯的解决方案,也许是我太菜了哈哈哈

思路

  1. 括号是一对一对生成的,所以,必须先有 ( ,再有 )
  2. 每次递归,只需要有 () 的数量,再有当前拼接成的字符串,就可以进行递归,获得结果。
  3. 递归就分为四种情况,() 都有可能有和没有,所以根据这四种情况进行判断就可以了

代码

  1. class Solution {
  2. List<String> res = new ArrayList<>();
  3. public List<String> generateParenthesis(int n) {
  4. if (n < 0) return res;
  5. generate(n, 0, "");
  6. return res;
  7. }
  8. // lLeft: 左括号剩余量
  9. // rRight: 右括号剩余量
  10. // preStr: 上一次generate的括号字符串
  11. private void generate(int lLeft, int rLeft, String preStr) {
  12. if (lLeft == 0 && rLeft == 0) {
  13. res.add(preStr);
  14. return;
  15. } else if (lLeft == 0 && rLeft > 0) {
  16. String str = preStr + ")";
  17. int l = lLeft;
  18. int r = rLeft - 1;
  19. generate(l, r, str);
  20. } else if (lLeft > 0 && rLeft > 0) {
  21. String str1 = preStr + "(";
  22. int l = lLeft - 1;
  23. int r = rLeft + 1;
  24. generate(l, r, str1);
  25. String str2 = preStr + ")";
  26. l = lLeft;
  27. r = rLeft - 1;
  28. generate(l, r, str2);
  29. } else if (lLeft > 0 && rLeft == 0) {
  30. String str = preStr + "(";
  31. int l = lLeft - 1;
  32. int r = rLeft + 1;
  33. generate(l, r, str);
  34. }
  35. return;
  36. }
  37. }

发表评论

表情:
评论列表 (有 0 条评论,336人围观)

还没有评论,来说两句吧...

相关阅读