Где ошибка в алгоритме пермутаций?
Алгоритм должен быть такой: с конца ищем первый символ, такой, что a[i] < a[i+1], так мы определяем наименьший разряд, который сделает число больше предыдущего. Затем нам нужно минимизировать "хвост", чтобы получилось число, ближайшее к исходному (чем меньше хвост, тем оно ближе к исходному). Для этого мы хвост сортируем по возрастанию и переставляем наше число наименьшего разряда с первым числом из хвоста, большим его.

В примере с 1234567890.

1. Ищем цифру наименьшего разряда, когда a[i] < a[i+1]. Это 8, хвост [9, 0].
2. Сортируем хвост [0, 9] и идем по нему в поисках первой цифры, большей нашей 8. Это 9.
3. Переставляем их и возвращаем результат
1234567809 => 1234567908
Количество перестановок множества длиной N равно N! (факториал). У вас цикл длиной N, т.е. вы не все варианты перебираете. Может быть, конечно, что можно перебирать не все варианты, но из последнего примера явно следует, что одиночными попарными рокировками не обойтись.