Я изо всех сил пытаюсь найти решение для следующей проблемы.
Представьте, что у меня есть 6 конфет, и я должен дать этим конфетам 6 детей, где ни у одного из них не может быть больше 2 конфет.
Пример: 000222 121020
Что мне нужно сделать, так это найти все возможные решения в лексикографическом порядке, поэтому для того же примера, что и выше, он будет выглядеть следующим образом.
000222 001122001212 001221
Я написал алгоритм для создания базового решения, которое дало бы мне первое лексикографическое решение (в приведенном выше примере это дало бы мне результат 000222), а затем я написал другой алгоритм, который всегда находил бы меняСледующее решение в лексикографическом порядке, поэтому, если я отправлю 000222 этому алгоритму, это даст мне 001122.
Моя проблема в том, что мой алгоритм не работает должным образом, так, как я написал, когда ему нужно что-то вроде этого:
console.log(nextSchedule("001221"))
Это даст мне 002121, когда правильный ответ будет 002022. ЯЯ понимаю, почему мой алгоритм делает это, но я не знаю, как его улучшить, чтобы он мог справиться с этими случаями.
Я отправляю свой алгоритм nextSchedule таким, какой он есть сейчас.
Может кто-тодайте мне какое-то направление, чтобы заставить его работать?
Заранее спасибо!
function nextSchedule(currentSchedule) {
let newSchedule = currentSchedule.split('');
for (let i = newSchedule.length - 1; i > 0; i--) {
if (newSchedule[i] > newSchedule[i - 1]) {
newSchedule[i]--;
newSchedule[i - 1]++;
break;
}
}
newSchedule = newSchedule.join('');
return newSchedule === currentSchedule ? null : newSchedule;
}