查找具有相同顺序的所有可能排列或组合[关闭]

Posted

技术标签:

【中文标题】查找具有相同顺序的所有可能排列或组合[关闭]【英文标题】:Find all possible permutations or combinations with the same order [closed] 【发布时间】:2013-11-05 12:58:46 【问题描述】:

我正在尝试编写一个程序来打印具有 8 个变量的所有可能排列,其中每个变量都有多个选择。 例如。我有

A = "A1" //has only one choice
B = "B1", "B2", "B3", "B4" // has 4 choices
C = "C1", "C2" //has 2 choices
:
:
I = "I1", "I2", "I3", "I4" //has 4 choices

我的输出应该是这样的形式:A-B-C-D-E-F-G-H-I,每个变量都有所有可能的选择,并且顺序应该是一样的。

A1-B1-C1-D1-E1-F1-G1-H1-I1
A1-B2-C1-D1-E1-F1-G1-H1-I1
A1-B3-C1-D1-E1-F1-G1-H1-I1
A1-B4-C1-D1-E1-F1-G1-H1-I1
A1-B1-C2-D1-E1-F1-G1-H1-I1
etc. 

我在这里查看了所有其他问题,但我无法确定是否可以为此使用内置的 java 排列类。我尝试编写一个递归程序,但在尝试将每个选择分解为所有可能的输出时被卡住了。感谢有关如何在 java/c++/vba 中完成此操作的任何提示,因为语言不是考虑因素。谢谢!

【问题讨论】:

为什么要搞乱递归,听起来像是简单嵌套循环的工作 我不确定我是否理解您的示例输出 @Leeor - 九层嵌套。在嵌套级别上递归可能更容易。 您的问题与除“算法”之外的任何标签无关。从那开始:用文字写下你想要发生的过程,就像你在给出指示一样。一旦您对此感到满意,请从您知道的语言中选择一种语言。 @TedHopp,它可能看起来很糟糕,但更容易理解和维护,更安全(破坏条件可能会变得讨厌),并且更少的堆栈滥用。但是你确实使用了一个不错的技巧,+1 :) 【参考方案1】:

您可以编写一系列 9 个嵌套循环,以简单的方式完成这项工作。但是,这将是一团糟,并且可以通过嵌套级别的递归更简单地完成。 (不要尝试对每个级别的数据进行递归;那是没有意义的。)这是伪代码中的 Java 解决方案:

String[][] DATA = A, B, ..., I;

void printAll(int recursionLevel, String prefix) 
    String[] level = DATA[recursionLevel];
    if (recursionLevel == DATA.length - 1) 
        // last level -- actually do the output
        for (String val : level) 
            System.out.println(prefix + "-" + val);
        
     else 
        // recurse
        if (prefix.length() > 0) 
            prefix += "-";
        
        for (String val : level) 
            printAll(recursionLevel + 1, prefix + val);
        
    

你可以通过调用来生成输出:

printAll(0, "");

【讨论】:

以上是关于查找具有相同顺序的所有可能排列或组合[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

有重复元素的排列问题

Python3 - 排列组合的迭代

查找具有给定总和的数字列表的所有组合

R如何排列数据帧的所有行,以便在列表中返回所有可能的行组合?

如何找到具有重复项的集合的所有子集? [关闭]

123能组成多少组数排列出来是啥