如何使用 C# 从给定数字 k 中找出所有不同的左括号和右括号组合?
csharpserver side programmingprogramming更新于 2025/4/17 3:52:17
创建一个回溯函数,如果左括号小于 n 或右括号小于左括号,则更新当前字符串。当当前字符串的长度等于 2*n 时,将其添加到组合结果数组中。只需保持放置的 { } 数量即可轻松跟踪。如果还有一个左括号未放置,我们可以开始放置。如果右括号不超过左括号的数量,我们可以开始放置。
示例
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication{
public class BackTracking{
public void Brackets(){
char[] arr = new char[4];
FindSequence(arr, 0, 2, 0, 0);
}
private static void FindSequence(char[] arr, int index, int N, int openBracket, int closeBracket){
if (closeBracket == N){
StringBuilder s = new StringBuilder();
for (int i = 0; i < arr.Length; i++){
s.Append(arr[i]);
}
Console.WriteLine(s);
s = null;
return;
}
else{
if (openBracket > closeBracket){
arr[index] = '}';
FindSequence(arr, index + 1, N, openBracket, closeBracket + 1);
}
if (openBracket < N){
arr[index] = '{';
FindSequence(arr, index + 1, N, openBracket + 1, closeBracket);
}
}
}
}
class Program{
static void Main(string[] args){
BackTracking b = new BackTracking();
b.Brackets();
}
}
}
输出
{}{}
{{}}

