排列单词的字母 - 需要澄清
Permuting Letters Of A Word - Clarification needed
我正在寻找一种方法来排列 java 中的一个词并遇到这个 code.I我实际上是自己学习的并且在理解代码的某些部分时遇到了一些困难:
首先这是什么类型的变量:used = new boolean[ in .length()]
?
我从来没有见过这样的布尔变量声明。
这段代码运行背后的基本逻辑是什么?
for (int i = 0; i < in .length(); ++i) {
如果(使用[i]){
继续;
}
out.append( 在 .charAt(i) 中);
使用 [i] = 真;
置换();
使用 [i] = 假;
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);
}
}
}
- 这是一个布尔数组。
- 一旦找到未使用的字符(
used[i]
为假),将其附加到 out
,将其标记为已使用 (used[i]=true
) & permute()
剩下的.完成后,将其标记为未使用 (used[i]=false
) 并删除您附加到 out
(out.setLength(out.length()-1)
) 的字符,以便您的循环可以继续查找未使用的字符。
我正在寻找一种方法来排列 java 中的一个词并遇到这个 code.I我实际上是自己学习的并且在理解代码的某些部分时遇到了一些困难:
首先这是什么类型的变量:
used = new boolean[ in .length()]
? 我从来没有见过这样的布尔变量声明。这段代码运行背后的基本逻辑是什么?
for (int i = 0; i < in .length(); ++i) { 如果(使用[i]){ 继续; } out.append( 在 .charAt(i) 中); 使用 [i] = 真; 置换(); 使用 [i] = 假; 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);
}
}
}
- 这是一个布尔数组。
- 一旦找到未使用的字符(
used[i]
为假),将其附加到out
,将其标记为已使用 (used[i]=true
) &permute()
剩下的.完成后,将其标记为未使用 (used[i]=false
) 并删除您附加到out
(out.setLength(out.length()-1)
) 的字符,以便您的循环可以继续查找未使用的字符。