Skip to content

Commit ed962bb

Browse files
authored
Merge pull request #1192 from benjiwright/main
[csharp] 46. Permutations
2 parents 87bbb42 + 05ecd5e commit ed962bb

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

Diff for: csharp/46-Permutations.cs

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
public class Solution
2+
{
3+
public IList<IList<int>> Permute(int[] nums)
4+
{
5+
var result = new List<IList<int>>();
6+
PermuteRecurse(result, nums, 0);
7+
return result;
8+
}
9+
10+
private void PermuteRecurse(List<IList<int>> res, int[] arr, int start)
11+
{
12+
if (start == arr.Length)
13+
{
14+
var list = arr.Select(t => (t)).ToList();
15+
res.Add(list);
16+
return;
17+
}
18+
19+
for (var i = start; i < arr.Length; i++)
20+
{
21+
(arr[start], arr[i]) = (arr[i], arr[start]);
22+
PermuteRecurse(res, arr, start + 1);
23+
(arr[start], arr[i]) = (arr[i], arr[start]);
24+
}
25+
}
26+
}

Diff for: csharp/494-Target-Sum.cs

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
public class Solution
2+
{
3+
public int FindTargetSumWays(int[] nums, int target)
4+
{
5+
return Dp(nums, target, nums.Length - 1, 0, new Dictionary<(int, int), int>());
6+
}
7+
8+
private int Dp(int[] nums, int target, int index, int sum, Dictionary<(int, int), int> memo)
9+
{
10+
if (memo.ContainsKey((index, sum))) return memo[(index, sum)];
11+
if (index < 0 && sum == target) return 1;
12+
if (index < 0) return 0;
13+
14+
var positive = Dp(nums, target, index - 1, sum + nums[index], memo);
15+
var negative = Dp(nums, target, index - 1, sum + -1 * nums[index], memo);
16+
17+
memo.Add((index, sum), positive + negative);
18+
return memo[(index, sum)];
19+
}
20+
}

0 commit comments

Comments
 (0)