美文网首页后浪 · 正青春
LeetCode上一道递归算法问题

LeetCode上一道递归算法问题

作者: 乔一丁_2020强化班 | 来源:发表于2021-01-16 19:57 被阅读0次
public static List<String> res = new ArrayList<>();
private static void dfs(int left,int right,String curStr){
    if(left==0&&right==0){
      res.add(curStr);
      return;
    }
    if(left>0){
      dfs(left-1,right,curStr+"(");

    }
    if(right>left){
      dfs(left,right-1,curStr+")");
    }
  }

这是力扣上一道有意思的算法问题。
首先,我们先来理解dfs这个方法的含义:left个左括号和right个右括号,能有几种排列方式,将所有可能的且保证配对的括号排列起来。
第一个if的意思是当左右括号都被排完之后,将整个方法生成的字符串添加到列表res中去,也就是一条递归支线的结束。

第二个的if是当还有左括号时,将左括号排布进去,然后递归自身,排布剩余的括号。剩余的右括号数量大于传入左括号数量的部分,是可以随意排列的,因为前面已经排好了与之配对的左括号。

第三行的if是当右括号比左括号多时,排布右括号。因为上面第二个if已经排布过左括号了,这次仅判断是否应该排布右括号,这时如果left等于right,说明前面的括号正好匹配完,要是再排右括号,就会导致它没有匹配的左括号;如果此时left大于right,说明需要排的左括号大于右括号的数量。但是如果需要排布的左括号多的情况是不存在的。

为什么说是不存在的呢,因为括号都是左括号开头,右括号结尾,所以一定是先排过左括号了,才会排右括号,所以剩余的右括号总是大于等于左括号的数量。(重点理解:试想一下,如果剩余的左括号比右括号多,因为左括号总数和右括号总数是相同的,所以,前面部分的右括号要比前面部分的左括号多,就会导致前面部分右括号肯定有未配对的)

相关文章

  • LeetCode上一道递归算法问题

    这是力扣上一道有意思的算法问题。首先,我们先来理解dfs这个方法的含义:left个左括号和right个右括号,能有...

  • Count and Say

    标签: C++ 算法 LeetCode 字符串 递归 每日算法——leetcode系列 问题 Count and...

  • Generate Parentheses

    标签(空格分隔): C++ 算法 LeetCode 字符串 递归 每日算法——leetcode系列 问题 Gen...

  • 使用Memoization优化递归算法

    空闲时在LeetCode上练练算法题,一般来说,很多题目最容易想到的就是递归算法。递归算法不仅容易想到和实现,而且...

  • 2019-03-31

    本周学习简单总结 请一定在今天完成LeetCode全部算法题目 Leetcode算法题: 树: 递归:https:...

  • 用递归解决对象的深拷贝问题

    首先,有关【递归】的知识请参考上一节,链接地址: 【上一篇】:带你刷LeetCode中的递归算法[http://m...

  • Leetcode 347 Top K Frequent Elem

    上一篇leetcode专题,通过一道算法题,疏导了一下快速排序算法的知识点,今天根据leetcode的347整理一...

  • 矩阵链乘法

    递归算法: 迭代算法: 分析 递归算法:规模为n的问题,有n个递归,每个递归又有相应矩阵个数个递归,故T(n)=T...

  • 递归算法

    递归算法,简单却不简单的一种算法。 递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过...

  • ARTS 20201208-1215

    Algorithm: 每周至少做一个 LeetCode 的算法题算法题:1 剑指 offer 24: 翻转链表递归...

网友评论

    本文标题:LeetCode上一道递归算法问题

    本文链接:https://www.haomeiwen.com/subject/pdfoaktx.html