我编写此代码是为了查找某些数字的所有可能排列。但我不想使用一位数字两次:
123,132,213 可以,但它会产生 122、121 等数字。
我做错了什么?
import java.util.HashSet;
public class main {
public static void main(String[] args) {
HashSet<Integer> l = new HashSet<Integer>();
for(int i=0;i<=3;i++){
l.add(i);
}
perm(l,3,new StringBuffer());
}
static void perm(HashSet<Integer> in, int depth,StringBuffer out){
if(depth==0){
System.out.println(out);
return;
}
int len = in.size();
HashSet<Integer> tmp = in;
for(int i=0;i<len;i++){
out.append(in.toArray()[i]);
tmp.remove(i);
perm(tmp,depth-1,out);
out.deleteCharAt(out.length()-1);
tmp.add(i);
}
}
}
最佳答案
tmp.remove(i)
是错误的。您需要从 tmp 中删除第 i 个元素...您正在删除元素“i”。因此,执行tmp.remove(in.toArray()[i])
。我认为这会解决这个问题。例如,如果第零个元素是 17,则执行 tmp.remove(i)
将从 HashSet 中删除所有零,而不是“17”。
关于java - 查找所有排列代码问题 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109131/