Перебрать все варианты перестановки - C#

Формулировка задачи:

вот есть иверсная запись чисел, нужно в ней сделат ьперестановку например вводиш 3 а оно выводит 123 132 231 213 312 321
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Lr1_a
{
class Program
{
static void Main(string[] args)
{
System.Console.Write("Введите инверсное число: ");
String str = System.Console.ReadLine();
List<int> mas = new List<int>(str.Length);
for (int i = str.Length - 1; i >= 0; i--)
{
mas.Insert(str[i] - 48, i + 1);
}
System.Console.Write("Число:");
for (int i = 0; i < str.Length; i++)
System.Console.Write(mas[i]);
System.Console.ReadKey();
}
}
}

Код к задаче: «Перебрать все варианты перестановки - C#»

textual
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Algorithms
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] r = Enumerable.Range(1, n).ToArray();
            do Console.WriteLine(string.Join(" ", r)); while (NextPermutation(r));
            Console.ReadKey();
        }
 
        static bool NextPermutation<T>(IList<T> a) where T : IComparable<T>
        {
            if (a.Count < 2) return false;
            var k = a.Count - 2;
 
            while (k >= 0 && a[k].CompareTo(a[k + 1]) >= 0) k--;
            if (k < 0) return false;
 
            var l = a.Count - 1;
            while (l > k && a[l].CompareTo(a[k]) <= 0) l--;
 
            var tmp = a[k];
            a[k] = a[l];
            a[l] = tmp;
 
            var i = k + 1;
            var j = a.Count - 1;
            while (i < j)
            {
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
                i++;
                j--;
            }
 
            return true;
        }
    }
 
}

9   голосов, оценка 4.556 из 5


СОХРАНИТЬ ССЫЛКУ