如何使用 C# 从给定的数字 k 中找到所有不同的左括号和右括号组合?
创建一个回溯函数,如果左括号小于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(); } } }输出结果
{}{} {{}}