我创建了一种方法,其中创建了+,-,*,/的每个可能顺序,但是在为同一运算符的多个倍数创建订单时遇到了问题。
到目前为止,我使用了这个可行的方法,但是它多次生成相同的顺序,这是我不希望的:
generateOperatorOrders(new ArrayList<>(Arrays.asList("+", "-", "*", "/", "+", "-", "*", "/", "+", "-", "*", "/")), new Stack<>(), 3);
这是我的方法代码:
private void generateOperatorOrders(List<String> operators, Stack<String> permutation, int size) {
if (permutation.size() == size) {
System.out.println(Arrays.toString(permutation.toArray(new String[0])));
possibleOperatorOrders.add(permutation.toArray(new String[0]));
}
String[] availableOperators = operators.toArray(new String[0]);
for (String string : availableOperators) {
permutation.push(string);
operators.remove(string);
generateOperatorOrders(operators, permutation, size);
operators.add(permutation.pop());
}
}
这是我在仅获得可能的标准操作员订单而没有相同操作员的订单时使用的方法。
generateOperatorOrders(new ArrayList<>(Arrays.asList("+", "-", "*", "/")), new Stack<>(), 3);
[+, -, /]
[+, *, /]
[+, *, -]
[+, /, -]
[+, /, *]
[-, *, /]
[-, *, +]
[-, /, +]
[-, /, *]
[-, +, *]
[-, +, /]
[*, /, +]
[*, /, -]
[*, +, -]
[*, +, /]
[*, -, /]
[*, -, +]
[/, +, -]
[/, +, *]
[/, -, *]
[/, -, +]
[/, *, +]
[/, *, -]