gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:25 25 4
gpt4 key购买 nike

我是一名 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 年级,这是我首先想到的。

有人可以帮我解决一下,或者至少提示一下哪里出了问题吗?请不要建议递归解决方案,因为我想先迭代地完成它。谢谢,提交。

最佳答案

重复排列

当你有 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<n; i++)
{
for(j=0; j<n; j++)
{
System.out.println(values[j] + " " + values[i]);
}
}
}
}


//when n and r are known only dynamically

class Permutation
{
public static void main(String[] args)
{
char[] values = {'a', 'b', 'c', 'd'};
int n = values.length;
int r = 2;
int i[] = new int[r];
int rc = 0;
for(int j=0; j<Math.pow(n,r); j++)
{

rc=0;
while(rc<r)
{
System.out.print(values[i[rc]] + " ");
rc++;
}
System.out.println();
rc = 0;
while(rc<r)
{
if(i[rc]<n-1)
{
i[rc]++;
break;
}
else
{
i[rc]=0;
}
rc++;
}
}
}
}

关于java - Java 中的字符串排列(非递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12189698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com