最近看到这个“算法”题,其实在解题过程当中并无发现过多算法。算法
解题思路: 在1,2...9 插入运算符(+ - 或者没有),1到9有8个空位,每一个空位有三种可能性,也就是3^8种。数组
运用PHP的弱类型特性,以及强大的数组, 咱们只须要将每一个有运算符的数字放入数组中便可。函数
好比: ["1," "+23", "-45", "678", "-9"], 不一样的运算符就组合成相似的数组,最后magic函数 array_sum。spa
$a = [[1]]; $l = 1; $t = microtime(true); while($l < 9) { $c = []; foreach($a as $k => $d) { $e = count($d); $f = [$d, $d, $d]; $f[0][$e-1] = $f[0][$e-1] . ($l + 1); $f[1][] = '+'. ($l + 1); $f[2][] = '-' . ($l + 1); $c = array_merge($c, $f); } $a = $c; $l++; } foreach($a as $v) { if (array_sum($v) == 100) { echo implode('', $v) .' = 100' . PHP_EOL; } } $t2 = microtime(true); echo ($t2 - $t) .PHP_EOL;
输出结果:code
123+45-67+8-9 = 100
123+4-5+67-89 = 100
123-45-67+89 = 100
123-4-5-6-7+8-9 = 100
12+3+4+5-6-7+89 = 100
12+3-4+5+67+8+9 = 100
12-3-4+5-6+7+89 = 100
1+23-4+56+7+8+9 = 100
1+23-4+5+6+78-9 = 100
1+2+34-5+67-8+9 = 100
1+2+3-4+5+6+78+9 = 100
0.22899389267blog