如何使用 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();
      }
   }
}

输出

{}{}
{{}}

更新日期: 2021 年 8 月 27 日

已观看 310 次

开启您的 职业生涯

完成课程后获得认证

开始
广告