вы делаете это очень дорогим способом, и сложность времени здесь экспоненциальная, потому что вы используете перестановки, которые требуют факториалов и факториалов, очень быстро растут, так как вы делаете перестановки, потребуется время, чтобы получить результат, когда входное значение больше 10.
11 factorial = 39916800
12 factorial = 479001600
13 factorial = 6227020800
и так далее ...
Так что не думайте, что вы не получите вывод для больших чисел, вы будете в итоге получим
Если вы go что-то вроде 20-30 факториала, я думаю, что мне потребуются годы, чтобы произвести какой-либо вывод, если вы используете циклы, с рекурсией вы переполните стек.
факт: 50 факториал - это число, которое больше, чем число зерен песка на земле, и компьютер сдается, когда им приходится иметь дело с такими большими числами.
Вот почему они заставляют вас включать специальный пароль в пароли, чтобы сделать слишком большое число перестановок, чтобы компьютеры не могли взломать его годами, если они будут пытаться использовать каждую перестановку, и шифрование также зависит от этой слабости компьютеры.
Так что вам не нужно и не следует делать это, чтобы решить эту проблему (потому что компьютер не очень хорош в этом) , это излишество
почему бы вам не взять каждый символ из одной строки и сопоставить его с каждым символом другой строки, в худшем случае это будет квадратичное значение c.
И если вы отсортируете обе строки, вы можете просто скажем
string1.equals(string2)
true
означает анаграмма
false
означает не анаграмма
и это займет линейное время, кроме времени, затраченного на сортировку.