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 }

 

转载于:https://www.cnblogs.com/liangmou/p/7997196.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值