Строковые перестановки в Java (не рекурсивные)
Я ученик 10-го класса средней школы, пытающийся решить некоторые проблемы в книге «Структуры данных и алгоритмы данных на Java».
Одним из вопросов является печать всех перестановок строки.
class C14
{
public static void main(char a[])
{
// char[] a = {'c','a','r','b','o','n'};
int c=0,w=0;
for(int q = 0;q<a.length;q++)
{
for(int i=0;i<a.length;i++)
{
for(int j=1;j<a.length;j++)
{
for(int k=1;k<a.length-1;k++)
{
for(int z=0;z<a.length;z++)
{
System.out.print(a[z]);
c++;
}
w++;
System.out.println();
char p=a[k+1];
a[k+1]=a[k];
a[k]=p;
}
System.out.println();
}
System.out.println();
char x=a[0];
a[0]=a[1];
a[1]=x;
}
}
System.out.println(" Character count = " + c);
System.out.println(" Word count = " + w);
}
}
Это моя попытка. Книга просит меня сделать это для символов «c», «a», «r», «b», «o», «n». Мое решение делает именно это, но когда я пытаюсь использовать 3 или 4 буквенные слова, оно дает мне повторения. Если я удаляю самый внешний цикл и пытаюсь его напечатать, он работает для 3-х и 4-х буквенных слов, но не для 5+ -буквенных слов.
Я буду рад уточнить мои аргументы в пользу этого, я знаю, что это не самое эффективное решение, но имейте в виду тот факт, что я учусь только в 10 классе, и это то, что пришло мне в голову первым.
Может кто-нибудь помочь мне или хотя бы намекнуть на то, что не так? Пожалуйста, не советуйте рекурсивное решение, потому что я хочу сначала пройти его итеративно. Спасибо, Sumit.