没有递归的置换算法?爪哇

新手上路,请多包涵

我想得到一个数字的所有组合而不重复。像 0.1.2、0.2.1、1.2.0、1.0.2、2.0.1、2.1.0。我试图找到一个简单的方案,但找不到。我为它画了一个图/树,这尖叫着使用递归。但如果可能的话,我想在没有递归的情况下这样做。

谁能帮我做到这一点?

原文由 Andreas Hornig 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 244
1 个回答

你应该使用这样一个事实,即当你想要 N 个数字的所有排列时,就有 N!可能性。因此每个数字 x 来自 1..N!编码这样的排列。下面是一个示例,它迭代地打印出 sting 的所有排列。

 private static void printPermutationsIterative(String string){
        int [] factorials = new int[string.length()+1];
        factorials[0] = 1;
        for (int i = 1; i<=string.length();i++) {
            factorials[i] = factorials[i-1] * i;
        }

        for (int i = 0; i < factorials[string.length()]; i++) {
            String onePermutation="";
            String temp = string;
            int positionCode = i;
            for (int position = string.length(); position > 0 ;position--){
                int selected = positionCode / factorials[position-1];
                onePermutation += temp.charAt(selected);
                positionCode = positionCode % factorials[position-1];
                temp = temp.substring(0,selected) + temp.substring(selected+1);
            }
            System.out.println(onePermutation);
        }
    }

原文由 Filip Nguyen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题