LeetCode OJ-22-Generate Parentheses

本文介绍了一个生成正确配对括号组合的算法问题。通过深度优先搜索递归方法,实现了n对括号的所有有效组合。文章提供了详细的代码实现,并讨论了递归调用中的参数管理和变量传递问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

大意:

给定n对括号,输出他们所有正确的组合。

思路:

采用深度优先的递归方法。

代码:

public class Solution {
    public List<String> generateParenthesis(int n) {
        List<String> result = new ArrayList<>();
        String s = "";
        dfs(result, s, n, n);
        return result;
    }

    private void dfs(List<String> result, String s, int left, int right) {
        if(left > right) {
            return;
        }

        if(left == 0 && right == 0) {
            result.add(s);
            return;
        }

        if(left > 0) {
            dfs(result, s + "(", left - 1, right);
        }

        if(right > 0) {
            dfs(result, s + ")", left, right - 1);
        }
    }
}

注意点:

传递String类型的变量是值传递。

递归调用中使用全局变量和函数参数之间的差异:
对树、图进行遍历时,包括 前序、中序、后序、深度搜索、广度搜索
存在一些参数,可以用
1. 全局变量表示,递归结束后必须对该变量修改,恢复原值
2. 普通函数参数,因为递归调用函数时,实际上,从内存分布上看,每一层调用都保存了该层函数的参数,因此递归返回上层时,不会影响原参数值

见博客:http://william-third.iteye.com/blog/1856108

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值