Leetcode 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: 

"123", 6 -> ["1+2+3", "1*2*3"] 
"232", 8 -> ["2*3+2", "2+3*2"]
"105", 5 -> ["1*0+5","10-5"]
"00", 0 -> ["0+0", "0-0", "0*0"]
"3456237490", 9191 -> []

 1 public class Solution {
 2     public IList<string> AddOperators(string num, int target) {
 3         var result = new List<string>();
 4         if (num == null || num.Length == 0) return result;
 5         
 6         DFS("", result, num, (long)target, 0, 0, 0);
 7         return result;
 8     }
 9     
10     private void DFS(string path, IList<string> result, string num, long target, int start, long eval, long multied)
11     {
12         if (start >= num.Length)
13         {
14             if (eval == target)
15             {
16                 result.Add(path);
17             }
18             
19             return;
20         }
21         
22         for (int i = start; i < num.Length; i++)
23         {
24             if (num[start] == '0' && i > start) break;
25             
26             long cur = Int64.Parse(num.Substring(start, i - start + 1));
27             
28             if (start == 0)
29             {
30                 DFS(cur.ToString(), result, num, target, i + 1, cur, cur);    
31             }
32             else
33             {
34                 DFS(path + "+" + cur, result, num, target, i + 1, eval + cur, cur);
35                 DFS(path + "-" + cur, result, num, target, i + 1, eval - cur, -cur);
36                 DFS(path + "*" + cur, result, num, target, i + 1, eval - multied + multied * cur, multied * cur);
37             }
38         }
39     }
40 }

 

posted @ 2017-12-07 04:02  逸朵  阅读(101)  评论(0编辑  收藏  举报