DeepSeek LeetCode 22. 括号生成 Rust实现
2026/8/31 15:56:44 网站建设 项目流程

LeetCode 22 题「括号生成」的 Rust 实现,最推荐回溯法(DFS)。核心思路是:在递归构建字符串的过程中,始终保证已放右括号数不超过左括号数。

✅ 方案一:回溯法(DFS)—— 最推荐

这是最直观、高效的方法。Rust 中需注意 String 的所有权,通常用 &mut String 传递并在递归后 pop。

implSolution{pubfngenerate_parenthesis(n:i32)->Vec<String>{letmutresult=Vec::new();letmutcurrent=String::new();Self::backtrack(nasusize,0,0,&mutcurrent,&mutresult);result}fnbacktrack(n:usize,open:usize,close:usize,current:&mutString,result:&mutVec<String>){ifcurrent.len()==2*n{result.push(current.clone());return;}ifopen<n{current.push('(');Self::backtrack(n,open+1,close,current,result);current.pop();}ifclose<open{current.push(')');Self::backtrack(n,open,close+1,current,result);current.pop();}}}

🔄 方案二:动态规划(DP)

利用合法括号组合的性质:(A)B,其中 A 和 B 都是合法组合。此方法无需递归,但需要处理 Vec 的所有权。

implSolution{pubfngenerate_parenthesis(n:i32)->Vec<String>{letn=nasusize;letmutdp=vec![vec![String::new()]];// dp[0] = [""]foriin1..=n{letmutcur=Vec::new();forjin0..i{forleftin&dp[j]{forrightin&dp[i-1-j]{cur.push(format!("({}){}",left,right));}}}dp.push(cur);}dp.remove(n)}}

📝 方案三:BFS(广度优先搜索)

从 “(” 开始逐层扩展,当左右括号都用完时收集结果。该方法会同时维护多个状态,代码稍显复杂。

⚡ 性能与总结

· 效率:回溯法(DFS)和 DP 都是最优的,时间复杂度为第 n 个卡特兰数 O(4^n / n^(3/2))。
· 选择:回溯法最推荐,因为它最直观、最容易在面试中写出,且能自然地处理 Rust 的所有权问题。

如果对某个方案的细节还有疑问,可以随时再问我。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询