forked from neetcode-gh/leetcode
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0752-open-the-lock.cs
48 lines (45 loc) · 1.64 KB
/
0752-open-the-lock.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
46
47
48
publicclassSolution{
publicintOpenLock(string[]deadends,stringtarget)
{
conststringstart="0000";
vardeadEnds=deadends.ToHashSet();
varvisited=newHashSet<string>();
if(deadEnds.Contains(start)||deadends.Contains(target))return-1;
Queue<string>q=newQueue<string>(new[]{start});
visited.Add(start);
intres=0;
while(q.Count>0)
{
intqueueCnt=q.Count;
for(inti=0;i<queueCnt;i++)
{
varcurr=q.Dequeue();
if(curr==target)returnres;
foreach(varneiinGetNeighbors(curr))
{
if(!visited.Contains(nei)&&!deadends.Contains(nei))
{
q.Enqueue(nei);
visited.Add(nei);
}
}
}
res++;
}
return-1;
}
privateList<string>GetNeighbors(strings)
{
varresult=newList<string>();
for(inti=0;i<s.Length;i++)
{
varcharAr1=s.ToCharArray();
charAr1[i]=charAr1[i]=='9'?'0':(char)((int)charAr1[i]+1);
result.Add(newstring(charAr1));
varcharAr2=s.ToCharArray();
charAr2[i]=charAr2[i]=='0'?'9':(char)((int)charAr2[i]-1);
result.Add(newstring(charAr2));
}
returnresult;
}
}