如何解决如何查找具有所有不同字符的字符串的排列?
我在书中发现了一段代码,声称可以打印带有所有不同字符的字符串的所有排列:-
void permutation(String str) {
permutation(str,"");
}
void permutation(String str,String prefix) {
if (str.length() == 0) {
System.out.println(prefix);
} else {
for (int i = 0; i < str.length(); i++) {
String rem = str.substring(0,i) + str.substring(i + 1);
permutation(rem,prefix + str.charAt(i));
}
}
}
代码中rem变量的作用是什么?
解决方法
您可以可视化该过程。
static int indent = 0;
static String indent(int i) { return " ".repeat(i); }
void permutation(String str) {
System.out.println("permutation(\"" + str + "\")");
++indent;
permutation(str,"");
}
void permutation(String str,String prefix) {
System.out.println(indent(indent) + "permutation(\"" + str + "\",\"" + prefix + "\")");
if (str.length() == 0) {
System.out.println(indent(indent + 1) + "--> "+ prefix);
} else {
for (int i = 0; i < str.length(); i++) {
String rem = str.substring(0,i) + str.substring(i + 1);
++indent;
permutation(rem,prefix + str.charAt(i));
--indent;
}
}
}
和
permutation("abc");
输出
permutation("abc")
permutation("abc","")
permutation("bc","a")
permutation("c","ab")
permutation("","abc")
--> abc
permutation("b","ac")
permutation("","acb")
--> acb
permutation("ac","b")
permutation("c","ba")
permutation("","bac")
--> bac
permutation("a","bc")
permutation("","bca")
--> bca
permutation("ab","c")
permutation("b","ca")
permutation("","cab")
--> cab
permutation("a","cb")
permutation("","cba")
--> cba
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。