【发布时间】:2020-08-11 12:58:07
【问题描述】:
我在一本书中发现了一段代码,它声称可以打印具有所有不同字符的字符串的所有排列:-
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变量在代码中的作用是什么?
【问题讨论】:
-
取一个像
"abc"这样的字符串并通过函数来处理它。尝试理解代码中的每一步。拿一张纸写下部分结果。 -
您知道
permutation(String, String)在某些条件下使用调整参数调用自身的方法,不是吗? -
我不明白字符串 rem = something。为什么这个 rem 是必需的?
-
@Jeet 这不是“必需的”,但这个临时变量使代码更具可读性。你可以在
permutation-call 中写下所有内容,但这会是一个很长的声明。 -
检查javadoc for
substring:str.substring(0,i) + str.substring(i +1)实际上给出了str,去掉了i'th字符。