-
Notifications
You must be signed in to change notification settings - Fork 120
/
Copy path0753-CrackingtheSafe.cs
45 lines (38 loc) · 1.3 KB
/
0753-CrackingtheSafe.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//-----------------------------------------------------------------------------
// Runtime: 120ms
// Memory Usage:
// Link:
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace LeetCode
{
public class _0753_CrackingtheSafe
{
public string CrackSafe(int n, int k)
{
var totalSize = (int)Math.Pow(k, n);
var alreadySeen = new HashSet<string>();
var results = new StringBuilder();
var start = new string('0', n - 1);
DFS(start, k, totalSize, alreadySeen, results);
results.Append(start);
return results.ToString();
}
private void DFS(string currentString, int k, int totalSize, ISet<string> alreadySeen, StringBuilder results)
{
if (alreadySeen.Count == totalSize)
return;
for (int i = 0; i < k; i++)
{
var newString = currentString + i.ToString();
if (alreadySeen.Contains(newString))
continue;
alreadySeen.Add(newString);
DFS(newString.Substring(1), k, totalSize, alreadySeen, results);
results.Append(i);
}
}
}
}