forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.cs
60 lines (56 loc) · 1.96 KB
/
Solution.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
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
public class Solution {
private static readonly int[,] directions = new int[4, 2] { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 }};
public void Solve(char[][] board) {
var lenI = board.Length;
var lenJ = lenI == 0 ? 0 : board[0].Length;
for (var i = 0; i < lenI; ++i)
{
for (var j = 0; j < lenJ; ++j)
{
if (board[i][j] == 'O')
{
var marked = new List<Tuple<int, int>>();
marked.Add(Tuple.Create(i, j));
board[i][j] = 'M';
bool escaped = false;
for (var m = 0; m < marked.Count; ++m)
{
for (var k = 0; k < 4; ++k)
{
var newI = marked[m].Item1 + directions[k, 0];
var newJ = marked[m].Item2 + directions[k, 1];
if (newI < 0 || newI >= lenI || newJ < 0 || newJ >= lenJ)
{
escaped = true;
}
else if (board[newI][newJ] == 'O')
{
board[newI][newJ] = 'M';
marked.Add(Tuple.Create(newI, newJ));
}
}
}
if (!escaped)
{
foreach (var item in marked)
{
board[item.Item1][item.Item2] = 'X';
}
}
}
}
}
for (var i = 0; i < lenI; ++i)
{
for (var j = 0; j < lenJ; ++j)
{
if (board[i][j] == 'M')
{
board[i][j] = 'O';
}
}
}
}
}