diff --git a/csharp/46-Permutations.cs b/csharp/46-Permutations.cs new file mode 100644 index 000000000..a885f91c2 --- /dev/null +++ b/csharp/46-Permutations.cs @@ -0,0 +1,26 @@ +public class Solution +{ + public IList> Permute(int[] nums) + { + var result = new List>(); + PermuteRecurse(result, nums, 0); + return result; + } + + private void PermuteRecurse(List> res, int[] arr, int start) + { + if (start == arr.Length) + { + var list = arr.Select(t => (t)).ToList(); + res.Add(list); + return; + } + + for (var i = start; i < arr.Length; i++) + { + (arr[start], arr[i]) = (arr[i], arr[start]); + PermuteRecurse(res, arr, start + 1); + (arr[start], arr[i]) = (arr[i], arr[start]); + } + } +} \ No newline at end of file diff --git a/csharp/494-Target-Sum.cs b/csharp/494-Target-Sum.cs new file mode 100644 index 000000000..dff1b10e4 --- /dev/null +++ b/csharp/494-Target-Sum.cs @@ -0,0 +1,20 @@ +public class Solution +{ + public int FindTargetSumWays(int[] nums, int target) + { + return Dp(nums, target, nums.Length - 1, 0, new Dictionary<(int, int), int>()); + } + + private int Dp(int[] nums, int target, int index, int sum, Dictionary<(int, int), int> memo) + { + if (memo.ContainsKey((index, sum))) return memo[(index, sum)]; + if (index < 0 && sum == target) return 1; + if (index < 0) return 0; + + var positive = Dp(nums, target, index - 1, sum + nums[index], memo); + var negative = Dp(nums, target, index - 1, sum + -1 * nums[index], memo); + + memo.Add((index, sum), positive + negative); + return memo[(index, sum)]; + } +} \ No newline at end of file