重复变异代码(组合学)?

有没有人有Java代码来生成所有VARIATIONS WITH REPETITION?

有很多可用的排列和组合示例,变化必须是最简单的…浪费时间重新发明轮子感觉很愚蠢(必须为此编写大量代码)。

VARIATIONS WITH REPETITION的一个例子可能是这样的:

(tupletSize=3, input= A, B) AAA, AAB, ABA, BAA, ABB, BAB, BBA, BBB 

谢谢!

这是按原样运作的,这对你来说是最容易学习的。

 public class Main { public static void main(String args[]) { brute("AB", 3, new StringBuffer()); } static void brute(String input, int depth, StringBuffer output) { if (depth == 0) { System.out.println(output); } else { for (int i = 0; i < input.length(); i++) { output.append(input.charAt(i)); brute(input, depth - 1, output); output.deleteCharAt(output.length() - 1); } } } } 
 public class Main { public static void main(String[] args) throws IOException { LinkedList items = new LinkedList(); char[] item = new char[3]; char[] input = {'A', 'B'}; rep(items, input, item, 0); for (char[] rep : items) { System.out.println(rep); } } private static void rep(LinkedList reps, char[] input, char[] item, int count){ if (count < item.length){ for (int i = 0; i < input.length; i++) { item[count] = input[i]; rep(reps, input, item, count+1); } }else{ reps.add(item.clone()); } } } 

产生以下输出:AAA AAB ABA ABB BAA BAB BBA BBB

注意大型tupleSize的堆栈溢出。 递归算法(比如这个)通常比迭代版本慢,但它们对代码非常方便。

如何写一个暴力密码破解者

虽然这不是Java实现,但是进行排列的部分应该很容易在Java中移植。

我把它移植到C而不知道Python,它就像一个魅力。