Я ищу алгоритм, который дает набор из n значений, каждое из которых может быть {0,1, ... m}, может эффективно найти все допустимые перестановки.
Правила:
Может быть только одно значение> 1:
n = 3, m = 5
{ 0, 0, 0 } is valid
{ 1, 5, 0 } is valid
{ 5, 2, 1 } is not valid
Когда значение! = 0, предыдущее значение не может быть 0. Это правило не может соблюдаться значение в позиции x:
n = 3, m = 5, x: 2
{ 1, 0, 0 } is valid
{ 0, 1, 0 } is invalid
{ 1, 0, 4 } is valid
Если я проверяю случайную коллекцию и она недействительна, я должен напечатать причину.
{ 2, 5, 0 }: Value 5 is illegal, there can be only one value > 1
{ 0, 3, 0 }: Value 3 is illegal, the previous value is 0