Java中的字符串排列(非递归)

我是一名十年级的高中生,试图解决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。

重复排列

当你有n个东西可供选择时…你每次都有n个选择!

选择其中的r时,排列为:

n×n×…(r次)= n ^ r

我提出2个案例。 第一种情况是我们已经知道n和r的大小,而且很容易。 n和r是动态的第二个。

 //when n and r are known statically class Permutation { public static void main(String[] args) { char[] values = {'a', 'b', 'c', 'd'}; int n = values.length; int r = 2; int i = 0, j = 0; for(i=0; i