题目:**18.25 (字符串排列)
编写一个递归方法,输出一个字符串的所有排列。例如,对于字符串abc,输出为:
abc
acb
bac
bca
cab
cba
提示:定义下面两个方法,第二个方法是一个辅助方法。
public static void displayPermutation(String s)
public static void displayPermutation(String s1, String s2)
第一个方法简单地调用displayPermutation("",s)。第二个方法使用循环,将一个字符串从s2移到s1,并使用新的s1和s2递归地调用该方法。基础情况是s2为空,将s1打印到控制台。
-
代码示例
编程练习题18_25StringArrangement.java
package chapter_18;
import java.util.Scanner;
public class 编程练习题18_25StringArrangement {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a string: ");
String s = input.next();
displayPermutation(s);
input.close();
}
public static void displayPermutation(String s) {
displayPermutation("", s);
}
public static void displayPermutation(String s1, String s2) {
//System.out.println("\""+s1+"\", \""+s2+"\"");//显示调用情况
if(s2 == "")
System.out.println(s1);
for(int i = 0;i < s2.length();i++) {
String shuffle1 = s1+s2.charAt(i);
String shuffle2 = s2.subSequence(0, i)+s2.substring(i+1);
displayPermutation(shuffle1,shuffle2);
}
}
}
-
输出结果
Enter a string: abc
abc
acb
bac
bca
cab
cba
-
输出调用情况
Enter a string: abc
"", "abc"
"a", "bc"
"ab", "c"
"abc", ""
abc
"ac", "b"
"acb", ""
acb
"b", "ac"
"ba", "c"
"bac", ""
bac
"bc", "a"
"bca", ""
bca
"c", "ab"
"ca", "b"
"cab", ""
cab
"cb", "a"
"cba", ""
cba