java置换(递归)的特殊解决方案?
根据教科书,作者要求我使用一种特殊的方法在java中实现排列。 更准确地说,存在两种功能:java置换(递归)的特殊解决方案?,java,recursion,permutation,Java,Recursion,Permutation,根据教科书,作者要求我使用一种特殊的方法在java中实现排列。 更准确地说,存在两种功能: public void static displayPermutation(String s)——它只是调用下一个函数displayPermutation(“,String s”) 从作者的角度来看,我们应该使用递归将逗号后面的“s”中的一个字符移动到第一个字符串中 然而,我发现我的代码不起作用,尽管我尽了一切努力来实现这一点。 这是我的密码: public static void displayPerm
public void static displayPermutation(String s)
——它只是调用下一个函数displayPermutation(“,String s”)代码>
从作者的角度来看,我们应该使用递归将逗号后面的“s”中的一个字符移动到第一个字符串中
然而,我发现我的代码不起作用,尽管我尽了一切努力来实现这一点。
这是我的密码:
public static void displayPermuation(String s){
displayPermuation("", s);
}
public static void displayPermuation(String s1, String s2){
if(s2.length() == 0){
System.out.println(s1);
return;
}else{
for(int i = 0; i < s2.length(); i++){
s1 = String.format(s1 + "%s", s2.charAt(i));
s2 = String.format("%s%s", s2.substring(0, i), s2.substring(i + 1, s2.length()));
displayPermuation(s1, s2);
}
}
}
publicstaticvoiddisplaypermuation(字符串s){
显示置换(“,s);
}
公共静态void displayperumation(字符串s1、字符串s2){
如果(s2.length()==0){
系统输出打印LN(s1);
回来
}否则{
对于(int i=0;i
请在下面找到此问题的解决方案。带有两个参数的函数displayPermuation将按以下方式编写。
这不起作用的原因是您正在更改for循环中的s1和s2,因此它会影响for循环迭代器
假设
s2=‘abc’
所以for循环运行3次
然后我们让s2=bc
所以长度变为2
如果您只是不更改for循环中s2的值,它将正常工作,如下面的代码所示
public static void displayPermuation(String s1, String s2) {
if (s2.length() == 0) {
System.out.println(s1);
return;
}
for (int i = 0; i < s2.length(); i++) {
displayPermuation(s1+s2.charAt(i), s2.substring(0,i)+s2.substring(i+1, s2.length()));
}
}
publicstaticvoiddisplaypermuation(字符串s1、字符串s2){
如果(s2.length()==0){
系统输出打印LN(s1);
回来
}
对于(int i=0;i
希望这有帮助。你说的“不工作”是什么意思?您预期会发生什么?实际结果是什么?在for循环的第一次迭代之后,字符串s1
和s2
不再是您假定的字符串。