java排列(递归)的特殊解决方案?
a special solution to the java Permutation (recursion)?
按照课本,作者让我用一种特殊的方法来实现java中的排列。
更准确地说,存在两个函数:
public void static displayPermutation(String s)
----简单调用下一个函数displayPermutation("", String s);
从作者的角度来看,我们应该从逗号后面的 "s" 递归一步步移动一个字符到第一个的 String
但是我发现我的代码不起作用,尽管我尽了一切努力来实现这一点。
这是我的代码:
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);
}
}
}
请在下方找到此问题的解决方案。具有两个参数的函数 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()));
}
}
希望对您有所帮助。
按照课本,作者让我用一种特殊的方法来实现java中的排列。 更准确地说,存在两个函数:
public void static displayPermutation(String s)
----简单调用下一个函数displayPermutation("", String s);
从作者的角度来看,我们应该从逗号后面的 "s" 递归一步步移动一个字符到第一个的 String
但是我发现我的代码不起作用,尽管我尽了一切努力来实现这一点。 这是我的代码:
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);
}
}
}
请在下方找到此问题的解决方案。具有两个参数的函数 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()));
}
}
希望对您有所帮助。