编写一个函数,给定一个数字字符串和一个目标值,打印出将+和*放在数字之间的位置,以便它们与目标值完全合并。请注意,答案可能不止一个,打印哪一个并不重要。
示例:

"1231231234",11353 -> "12*3+1+23*123*4"
"3456237490",1185  -> "3*4*56+2+3*7+490"
"3456237490",9191  -> "no solution"

最佳答案

如果您有一个n位数的值,则有n-1个可能的+或*运算符插槽。所以暴力,有3^(N-1)种可能性所有这些测试都是低效的。
但是
你的例子都是10位数3^9=19683,所以暴力是可以的!不需要任何幻想。
因此,您只需遍历所有19683个案例,每次为该案例构建一个字符串,并计算表达式计算表达式是一项简单的任务。迭代很简单(只需使用一个递增的值,就可以通过(i%3)读取第一个插槽的状态,该值为“no operator”“+”或“*”,第二个插槽的状态为(i/3)%3,第三个插槽的状态为(i/9)%3,依此类推)
即使是简单的解析代码,CPU也很快。
蛮力选项在大约20位数后开始变得难看,你必须切换才能变得更聪明。

关于c - 数组合算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/742566/

10-11 00:50