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

Làm thế nào để tìm các tập hợp con khác biệt từ một mảng nhất định bằng cách sử dụng C #?

Vấn đề tập hợp con khác biệt cho chúng ta sự kết hợp khác với mảng đã cho.

Khi mục tiêu là 2 thì từ mảng, chúng tôi lấy tất cả các kết hợp tương ứng với số 2, Khi mục tiêu là ba thì từ mảng, chúng tôi lấy tất cả các kết hợp tương ứng với số 3. Trong ví dụ dưới đây, mảng là [ 1,2,3] và mục tiêu là 2. Vì vậy, chúng tôi lấy tất cả các kết hợp tương ứng với số 2 “1,2”, “2,3”, “1,3” ”.

Ví dụ

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication{
   public class BackTracking{
      public void Subsets(int[] array){
         List<int> currentList = new List<int>();
         List<string> results = new List<string>();
         BackTrackkingCombination(array, 2, 0, currentList, results);
         foreach (var item in results){
            StringBuilder s = new StringBuilder();
            foreach (var item1 in item){
               s.Append(item1.ToString());
            }
            Console.WriteLine(s);
            s = null;
         }
      }
      public void BackTrackkingCombination(int[] array, int size, int startIndex, List<int> currentList, List<string> results){
         if (currentList.Count == size){
            StringBuilder s = new StringBuilder();
            foreach (var item in currentList){
               s.Append(item);
            }
            results.Add(s.ToString());
            return;
         }
         for (int i = startIndex; i < array.Length; i++){
            currentList.Add(array[i]);
            BackTrackkingCombination(array, size, i + 1, currentList, results); ;
            currentList.Remove(array[i]);
         }
      }
   }
   class Program{
      static void Main(string[] args){
         BackTracking b = new BackTracking();
         int[] arrs = { 1, 2, 3 };
         b.Subsets(arrs);
      }
   }
}

Đầu ra

12
13
23