Переставить большую цифру с меньшей предыдущей в числе местами

``Столкнулся с задачей - Найти ближайшую большую целую цифру в числе и переставить её местами с предыдущей, если таковой нет (то есть по факту, если number < 1, то результат null). То есть : 23 - манипуляция - 32 и то же самое 4056 - манипуляция - 4065 , то есть срабатывает только 1 раз. Не понимаю как это сделать в отсутствии Stack и List. Пытался написать что-то по типу int[] array = number.Select(x => x).ToArray(), но это скорее какой-то бред.

Пустой метод выглядит вот так

    public static int? TheBiggest(int number)
    {

       
    }

Код :

  char[] digit = number.ToString().ToArray();
        for (int i = 0; i < digit.Length; i++)
        {
            if (digit[i] < digit[i + 1])
            {
                char temp = '0';
                temp = digit[i];
                digit[i] = digit[i + 1];
                digit[i + 1] = temp;
                break;
            }
            else
            {
                return null;
            }
        }
        //конвертирование и вывод данных?

Ответы (1 шт):

Автор решения: Qwertiy

https://ideone.com/zgujh7

using System;
using System.Linq;

public class Test
{
  private static int? SwapMax(int n)
  {
    var a = n.ToString().ToCharArray();
    var c = a.Max();
    var i = Array.IndexOf(a, c);
    if (i == 0) return null;
    a[i] = a[i-1];
    a[i-1] = c;
    return int.Parse(new String(a));
  }
    
  public static void Main()
  {
    foreach (var n in new int[] {23, 32, 4056, 4056456, 8, 99, 89, 98, 103})
      Console.WriteLine("{0} => {1}", n, SwapMax(n));
  }
}
23 => 32
32 => 
4056 => 4065
4056456 => 4065456
8 => 
99 => 
89 => 98
98 => 
103 => 130

PS: Если linq нельзя, придётся максимум самому написать.

→ Ссылка