我正在寻找一种在java中置换单词的方法并遇到了这段代码。我实际上是自己学习它并且在理解代码的某些部分时遇到一些困难:
首先是什么类型的变量:used = new boolean[ in .length()]
?
我从来没有见过这样的布尔变量声明。
此代码段功能背后的基本逻辑是什么?
for(int i = 0; i< in .length(); ++ i){ if(used [i]){ 继续; } out.append(in .charAt(i)); used [i] = true; 置换(); used [i] = false; out.setLength(out.length() - 1);
原始计划
public class Permutations {
boolean[] used;
StringBuffer out = new StringBuffer();
String in ;
public Permutations(String str) { in = str;
used = new boolean[ in .length()];
}
public void permute() {
if (out.length() == in .length()) {
System.out.println(out);
return;
}
for (int i = 0; i < in .length(); ++i) {
if (used[i]) {
continue;
}
out.append( in .charAt(i));
used[i] = true;
permute();
used[i] = false;
out.setLength(out.length() - 1);
}
}
}
答案 0 :(得分:0)
used[i]
为false)后,将其附加到out
,将其标记为已使用(used[i]=true
)&amp;剩下的是permute()
。完成后,将其标记为未使用(used[i]=false
)&amp;删除附加到out
(out.setLength(out.length()-1)
)的字符,这样您的循环就可以继续查找未使用的字符。