问题表述为:给定一个仅包含数字0-9和目标值的字符串,返回通过在数字之间添加一些二元运算符(+, - 或*)创建的所有表达式,以便它们计算为目标值.在某些情况下,可能没有任何二进制运算符会创建有效的表达式,在这种情况下,该函数应返回一个空数组.新表达式中的数字不应包含前导零.
该函数应返回所有评估为目标的有效表达式,按字典顺序排序.
例如:
digits = "123"
和target = 6
,应该返回: ["1*2*3", "1+2+3"]
我目前的算法如下.它有点慢,所以我正在寻找一种更有效的方法来解决问题.我目前的算法产生操作数和运算符的所有组合.对于上面的例子,它产生了
操作数:
[['1', '2', '3'], ['1', '23'], ['12', '3'], ['123']]
Run Code Online (Sandbox Code Playgroud)
运营商:
{0: [()], 1: [('+',), ('-',), ('*',)], 2: [('+', '+'), ('+', '-'), ('+', '*'), ('-', '+'), ('-', '-'), ('-', '*'), ('*', '+'), ('*', '-'), ('*', '*')]}
Run Code Online (Sandbox Code Playgroud)
然后它结合了操作数和运算符的所有可能组合并评估每个.
数字有一个约束,2 ? digits.length ? 10.
所以它并没有那么糟糕,但是这个算法对于一个长度为10的数字需要大约4.3秒,其中它应该只需要4秒(最大值).
我还尝试使用以下替代方法加速eval()函数:
if eval(temp) == target:
Run Code Online (Sandbox Code Playgroud)
要么
exp_as_func = eval('lambda: ' + temp)
if exp_as_func() == target:
Run Code Online (Sandbox Code Playgroud)
要么
compiled = compile(temp, '<string>', 'eval') …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 xpathOdometer
从我的 xml 文件中获取 的值:
<?xml version="1.0" encoding="UTF-8"?>
<CWEAI xmlns="http://www.carrierweb.com/Schema/CWEAI_schema_1.0/cwReturnTruckCanbusHistory">
<cwReturnTruckCanbusHistory>
<ID>549094411</ID>
<CWVehicleID>109755</CWVehicleID>
<Odometer>1374031</Odometer>
<Fuel>452800</Fuel>
<FuelLevel>1000</FuelLevel>
</cwReturnTruckCanbusHistory>
</CWEAI>
Run Code Online (Sandbox Code Playgroud)
我已经尝试过任何事情,但我无法获得有效的 xpath:
CWEAI/cwReturnTruckCanbusHistory/Odometer
CWEAI/cwReturnTruckCanbusHistory/Odometer/text
CWEAI[@xmlns="http://www.carrierweb.com/Schema/CWEAI_schema_1.0/cwReturnTruckCanbusHistory"]/cwReturnTruckCanbusHistory/Odometer
Run Code Online (Sandbox Code Playgroud)