字符串的问题一般总是可以用DP来解决,但是也有很多用DFS解决的问题,这里汇总一下这样的题目,DFS的方法都差不多。
282.Expression Add Operators
Given a string that contains only digits 0-9 and a target value, return all possibilities to add binary operators (not unary) +, -, or * between the digits so they evaluate to the target value.
Examples:
241.Different Ways to Add Parentheses
Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.
Example 1
Input: "2-1-1"
.
Output: [0, 2]
Example 2
Input:"2*3-4*5"
Output: [-34, -14, -10, -10, 10]
[leetcode 282] Expression Add Operators
这种题目是最为常见的一道需要用DFS解决的题目,因为返回的是list,一般是DFS解。
这里主要是参考disscuss中排名第一的解法Java Standard Backtrace AC Solutoin, short and clear,其中提到三点:第一点是需要用长整形,第二点是需要考虑当第一个字符为0,就不需要继续添加字符,第三点是如果需要的运算符是*
的话,需要记录前面一个数字,这里需要消除前面的操作,用前面的数字来乘当前的数字。就直接放代码了,形式比较固定:
在评论中也给出了字符串用StringBuilder的方法,让代码的运行速度快了不少,这里就不重复试验了。
[leetcode 241] Different Ways to Add Parentheses
这道题是用递归解的,我做不出来,但是还是记录一下,也是一种常见的题目,思路就是大问题转小问题,小问题又有不同的解,然后在将其组合起来。
见discuss中第一的解法A recursive Java solution (284 ms)