今天我们将生成所有可能的数学方程。
给定这样的语法:[1,0][+,-][2,3]
这意味着我们需要所有字符串,第一个字符为 1 或 0,第二个字符为 + 或 -,第三个字符为 2 或 3。
所以这是 8 种可能的组合
1+2
1+3
1-2
1-3
0+2
0+3
0-2
0-3
我的方法会奏效,但对于稍大的值,它会变得很慢。我解析上述语法并为每个标记创建一个可能值的数组,并将其放在一个数组中。
equation_set = [];
tokens = [['1','0'],['+','-'],['2','3']]
// Initialize empty equation_set
token = tokens.pop();
foreach symbol in tokens
question_set.add(symbol)
// We now have a question_set = ['1','0']
// and tokens = [['+','-']['2','3']]
//
// Now we need to fill out the rest of the possible equations
foreach token in tokens
new_question_set = []
foreach symbol in token
foreach question in question_set
new_question_set.add(question + symbol)
question_set = new_question_set
我相信这应该会给我想要的结果,但是所有这些 foreach 让我相当紧张。我刚刚弄清楚了这个算法,但我觉得我错过了一些明显的东西。我们正在搞乱组合数学,所以如果它非常慢我不会感到惊讶,但感觉这并没有什么特别的。
干杯!