Computer >> Máy Tính >  >> Lập trình >> C#

Làm thế nào để tìm tất cả các kết hợp khác nhau của dấu ngoặc mở và đóng ngoặc từ số k đã cho bằng cách sử dụng C #?

Tạo một hàm backtrack để cập nhật chuỗi hiện tại nếu dấu ngoặc mở nhỏ hơn n hoặc dấu ngoặc đóng nhỏ hơn dấu ngoặc mở. Khi độ dài của chuỗi hiện tại trở nên bằng 2 * n, hãy thêm nó vào mảng kết quả kết hợp. Nó có thể được theo dõi một cách đơn giản bằng cách giữ lại số {} đã đặt. Chúng ta có thể bắt đầu một dấu ngoặc mở nếu chúng ta vẫn còn một dấu ngoặc để đặt. Và chúng ta có thể bắt đầu một dấu ngoặc đóng nếu nó không vượt quá số lượng dấu ngoặc mở.

Ví dụ

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();
      }
   }
}

Đầu ra

{}{}
{{}}