×

Tạo hoán vị chuỗi trong C# bằng đệ quy Hướng dẫn chi tiết và ví dụ

 

Để tạo tất cả các hoán vị của một chuỗi trong C#, bạn có thể sử dụng phương pháp đệ quy. Dưới đây là một triển khai chi tiết của thuật toán này:

Cách 1: Sử dụng đệ quy

Trong phương pháp này, chúng ta sẽ hoán đổi các ký tự trong chuỗi và sử dụng đệ quy để tạo ra các hoán vị.

using System;
using System.Collections.Generic;

class Program
{
    // Hàm để hoán đổi hai ký tự trong một mảng ký tự
    static void Swap(ref char a, ref char b)
    {
        char temp = a;
        a = b;
        b = temp;
    }

    // Hàm đệ quy để tạo các hoán vị của một chuỗi
    static void Permute(char[] arr, int l, int r, List<string> result)
    {
        if (l == r)
        {
            result.Add(new string(arr));
        }
        else
        {
            for (int i = l; i <= r; i++)
            {
                Swap(ref arr[l], ref arr[i]);
                Permute(arr, l + 1, r, result);
                Swap(ref arr[l], ref arr[i]); // Hoán đổi lại để quay lại trạng thái trước
            }
        }
    }

    // Hàm để tạo tất cả các hoán vị của một chuỗi
    static List<string> GetPermutations(string str)
    {
        List<string> result = new List<string>();
        char[] arr = str.ToCharArray();
        Permute(arr, 0, arr.Length - 1, result);
        return result;
    }

    static void Main()
    {
        Console.WriteLine("Nhập vào một chuỗi: ");
        string input = Console.ReadLine();

        List<string> permutations = GetPermutations(input);

        Console.WriteLine("Các hoán vị của chuỗi là:");
        foreach (string perm in permutations)
        {
            Console.WriteLine(perm);
        }
    }
}

Giải thích chi tiết:

  1. Swap Method:

    • Hoán đổi hai ký tự trong một mảng ký tự.
  2. Permute Method:

    • Hàm đệ quy để tạo các hoán vị của một chuỗi.
    • Tham số:
      • arr: Mảng ký tự của chuỗi.
      • l: Vị trí bắt đầu của đoạn cần hoán vị.
      • r: Vị trí kết thúc của đoạn cần hoán vị.
      • result: Danh sách chứa các hoán vị.
    • Thuật toán:
      • Nếu l bằng r, thêm chuỗi đã hoán vị vào danh sách kết quả.
      • Duyệt qua các ký tự từ l đến r:
        • Hoán đổi ký tự tại vị trí l với ký tự tại vị trí hiện tại.
        • Gọi đệ quy để tạo các hoán vị cho đoạn tiếp theo.
        • Hoán đổi lại để quay lại trạng thái trước đó.
  3. GetPermutations Method:

    • Tạo tất cả các hoán vị của một chuỗi và trả về danh sách chứa các hoán vị.
  4. Main Method:

    • Đọc chuỗi từ người dùng, gọi hàm GetPermutations để tạo các hoán vị và in ra các hoán vị.

Ví dụ:

Giả sử bạn nhập chuỗi "abc", chương trình sẽ in ra các hoán vị sau:

abc
acb
bac
bca
cab
cba

Phương pháp trên sử dụng đệ quy để tạo ra tất cả các hoán vị của một chuỗi. Bạn có thể chạy và thử nghiệm chương trình để hiểu rõ hơn về cách thức hoạt động của thuật toán này.

Comments