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"
.
((2-1)-1) = 0 (2-(1-1)) = 2
Output: [0, 2]
Example 2
Input: "2*3-4*5"
(2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)) = -10 (((2*3)-4)*5) = 10
Output: [-34, -14, -10, -10, 10]
1 public class Solution { 2 public IList<int> DiffWaysToCompute(string input) { 3 var result = new List<int>(); 4 5 for (int i = 0; i < input.Length; i++) 6 { 7 if (input[i] == '+' || input[i] == '-' || input[i] == '*') 8 { 9 var left = DiffWaysToCompute(input.Substring(0, i)); 10 var right = DiffWaysToCompute(input.Substring(i + 1, input.Length - i - 1)); 11 12 foreach (var l in left) 13 { 14 foreach (var r in right) 15 { 16 if (input[i] == '+') 17 { 18 result.Add(l + r); 19 } 20 else if (input[i] == '-') 21 { 22 result.Add(l - r); 23 } 24 else 25 { 26 result.Add(l * r); 27 } 28 } 29 } 30 } 31 } 32 33 if (result.Count == 0) 34 { 35 result.Add(Int32.Parse(input)); 36 } 37 38 return result; 39 } 40 }