using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Program { class PermutationGenerator { public Dictionary<string, List<int[]>> GroupedPermutations { get; private set; } private HashSet<string> uniquePermutations; public PermutationGenerator() { GroupedPermutations = new Dictionary<string, List<int[]>>(); uniquePermutations = new HashSet<string>(); } public void GeneratePermutations(int[] digits, int length) { GeneratePermutations(digits, new int[length], 0); } private void GeneratePermutations(int[] digits, int[] current, int index) { if (index == current.Length) { if (current[0] != 0) // Avoid permutations starting with 0 { AddPermutation(current); } return; } for (int i = 0; i < digits.Length; i++) { current[index] = digits[i]; GeneratePermutations(digits, current, index + 1); } } private void AddPermutation(int[] permutation) { var key = string.Concat(permutation.OrderBy(x => x)); var permutationString = string.Join("", permutation); if (!uniquePermutations.Contains(permutationString)) { uniquePermutations.Add(permutationString); if (!GroupedPermutations.ContainsKey(key)) { GroupedPermutations[key] = new List<int[]>(); } GroupedPermutations[key].Add((int[])permutation.Clone()); } } public void PrintGroupedPermutations() { foreach (var group in GroupedPermutations) { Console.WriteLine($"Group: {group.Key}"); foreach (var permutation in group.Value) { Console.WriteLine(string.Join("", permutation)); } Console.WriteLine(); } } } }