Вам действительно нужно проверить не более двух возможных перестановок.
Предположим, что ваш номер входа содержит только цифры X и Y, с X < Y. В вашем примере X = 1 и Y = 2.Я проигнорирую все особые случаи, когда у вас закончилась одна или другая цифра.
Этап 1: Обращайтесь с общим префиксом.
Пусть А - первая цифра в нижней границе диапазона и пусть В - первая цифра в верхней границе диапазона. Если A < B, то мы выполняем фазу 1 и переходим к Фазе 2.
В противном случае A = B. Если X = A = B, тогда используйте X в качестве первой цифры перестановки и повторите фазу 1 следующей цифры. Если Y = A = B, то используйте Y как первую цифру перестановки и повторите фазу 1 следующей цифры.
Если ни X, ни Y не равны A и B, остановите. Ответ №
Этап 2: Выполнен с общим префиксом.
На данный момент, A < B. Если A < < X B, а затем использовать X в качестве первой цифры перестановки и заполнения оставшихся цифр, однако вы хотите. Ответ: Да. (И аналогично, если A < Y < B.)
В противном случае проверьте следующие четыре случая. Не более двух случаев потребует реальной работы.
- Если A = X, попробуйте использовать X в качестве первой цифры перестановки, за которой следуют все Y, а затем остальные X. Другими словами, сделайте остальную часть перестановки максимально возможной. Если эта перестановка находится в зоне действия, то ответ будет да. Если эта перестановка не находится в диапазоне, то никакая перестановка, начинающаяся с X, не может быть выполнена.
- Если B = X, попробуйте использовать X в качестве первой цифры перестановки, а затем остальную часть X, за которой следуют все Y. Другими словами, сделайте остальную часть перестановки настолько малой, насколько это возможно. Если эта перестановка находится в зоне действия, то ответ будет да. Если эта перестановка не находится в диапазоне, то никакая перестановка, начинающаяся с X, не может быть выполнена.
- Аналогичные случаи, если A = Y или B = Y.
Если ни один из этих четырех случаев не прошел успешно, тогда ответ №. Обратите внимание, что не более одного из случаев Х и не более одного из случаев Y могут совпадать.
В этом решении я предположил, что номер ввода и два числа в диапазоне все содержат одинаковое количество цифр. При небольшой дополнительной работе подход может быть расширен до случаев, когда число цифр отличается.
Вы просите общий подход или как реализовать свою идею? Я думаю, что зацикливание на все перестановки было бы разумным. Например, количество перестановок для вашего номера примера будет: 10!/6!/4! = 210. Абсолютным наихудшим случаем для десятизначной строки будет 252. – Corbin