Thanks for sharing. A DFS solution.
private IList calculateAll(int[] nums){
ISet result = new HashSet();
if(nums.Length == 0) return result.ToList();
dfs(result, 0, nums[0], 0, nums);
return result.ToList();
}
private void dfs(ISet result, int total, int head, int iCur, int[] nums
){
if(iCur == nums.Length - 1){
result.Add(total + head);
return;
}
dfs(result, total + head, nums[iCur + 1], iCur + 1, nums); //+
dfs(result, total + head, -nums[iCur + 1], iCur + 1, nums); //-
dfs(result, total, head * nums[iCur + 1], iCur + 1, nums); //*
dfs(result, total, head / nums[iCur + 1], iCur + 1, nums); // div
}