从集合组合中创建字符串的所有字符

时间:2014-11-29 15:09:50

标签: java algorithm permutation

我可能很容易解决问题。我有7个数字序列,我有3个数字(例如0,1和2)。我想生成所有可能的字符串,长度等于7,包含这3个数字。 像这样的东西: 0000001 0000010 0000011 。 。 。 12020001 12021001 。 。 。 所有可能的组合。如何实现这一点(为了我的目的,我将在java中这样做)?我很多年前在我的大学里得到了统计数据而且我没有记住它;)在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我更喜欢Perl,但我希望类似的东西可以在Java中使用:

for ($a1=0; $a1<=2; $a1++) {
  for ($a2=0; $a2<=2; $a2++) {
    for ($a3=0; $a3<=2; $a3++) {
      for ($a4=0; $a4<=2; $a4++) {
        for ($a5=0; $a5<=2; $a5++) {
          for ($a6=0; $a6<=2; $a6++) {
            for ($a7=0; $a7<=2; $a7++) {
              $O=$a1.$a2.$a3.$a4.$a5.$a6.$a7;
              print "$O\n";
            }
          }
        }
      }
    }
  }
}

答案 1 :(得分:2)

我希望这能解决你的问题:

public static void main(String[] args) {

    // Create your list of numbers
    List<Integer> list = new ArrayList<Integer>();
    list.add(0);
    list.add(1);
    list.add(2);

    getPermutations(list, 7, "");
}

/**
 * Prints all possible permutations with a given list of numbers and a given
 * length of the output strings.
 * 
 * @param list
 *            - The list of possible numbers
 * @param depth
 *            - The recursion depth which equals the lengths of the output
 *            strings
 * @param val
 *            - The current value of the output string
 */
public static void getPermutations(List<Integer> list, int depth, String val) {
    if (depth <= 0) {
        return;
    }
    if (depth == 1) {
        for (Integer number : list) {
            System.out.println(number + val);
        }
    } else {
        for (Integer number : list) {
            getPermutations(list, depth - 1, number + val);
        }
    }
}

它更灵活,因为您可以选择输出字符串的长度和可能的数字列表。