java - 查找所有排列代码问题 (Java)

标签 java permutation

我编写此代码是为了查找某些数字的所有可能排列。但我不想使用一位数字两次:
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/

相关文章:

java - 如何在 Jar 文件中使用 2 个不同的 res 文件夹

javascript - 基于百分比的可能排列算法

r - 如何用R计算组标签的排列?

java - 如何从 Apache OpenNLP 中的 'binary file' 获取拼写更正的标记?

java - 何时使用convertRowIndexToModel

java - ConcurrenthashMap 和线程安全

java - 如何编写返回java列表的restful服务的测试用例

python - 使用python,找到总和尽可能接近另一个的数字组合

python - 小于最大值的所有因子产品的枚举

Java - 查找元音互换的单词的所有可能形式