Today we discuss another LeetCode challenge. This is a problem on Surrounded regions Give a 2D board containing X and O, capture all regions surrounded by X. A region is captured by flipping all O's in Xs
Here the O that lies on the boundary and those that are connected to it are exempt. Everything else can be captured. Consequently we work our way from outwards boundary and distinguish these Os by calling them say Y.After each boundary is considered, we eliminate it and repeat the step for the inner 2D board.
We use a method IsAdjacentAMatch(Position p, Piece item) that tests each of the eight positions adjacent to the current position for a match with the given item - say an X or a Y or a O.
For each of the elements on the border, we consider the adjacents and if they are O, we convert them to Y.
Finally for all the non-Ys we make a pass through the board and convert them to X.
void IsAdjancentAMatch( Position p, Piece item)
{ int x = P.x;
int y = P.y;
// test x-1,y-1
// test x-1,y
// test x-1, y+1
// test x, y-1
// test x, y+1
// test x+1, y-1
// test x+1, y
// test x+1,y+1
// In each of the test above for a match with Y or O, if its within the Board, mark it with Y
}
public class Solution {
public void Solve(ref char[,] board, int top_left_x, int top_left_y, int bottom_right_x, int bottom_right_y) {
// termination condition
if (bottom_right > top_left) return
// Take the elements along the border of the board
// 0th row
// last col
// n-1th row
// first col
If any element has an adjacency with Y, mark it Y
// Recurse with the inner board ( current board without the border)
Solve(ref b, top_left_x + 1, top_left_y + 1, bottom_right_x - 1, bottom_right_y -1)
}
}
#codingexercise
Double GetNthRootProductAlternateTermRaisedPDividedQoverPTimesQ PminusQ(Double [] A,Double p, Double q)
{
If ( A== null) return 0;
Return A.NthRootProductAlternateTermRaisedPDividedQoverPTimesQPminusQ(p, q);
}
Here the O that lies on the boundary and those that are connected to it are exempt. Everything else can be captured. Consequently we work our way from outwards boundary and distinguish these Os by calling them say Y.After each boundary is considered, we eliminate it and repeat the step for the inner 2D board.
We use a method IsAdjacentAMatch(Position p, Piece item) that tests each of the eight positions adjacent to the current position for a match with the given item - say an X or a Y or a O.
For each of the elements on the border, we consider the adjacents and if they are O, we convert them to Y.
Finally for all the non-Ys we make a pass through the board and convert them to X.
void IsAdjancentAMatch( Position p, Piece item)
{ int x = P.x;
int y = P.y;
// test x-1,y-1
// test x-1,y
// test x-1, y+1
// test x, y-1
// test x, y+1
// test x+1, y-1
// test x+1, y
// test x+1,y+1
// In each of the test above for a match with Y or O, if its within the Board, mark it with Y
}
public class Solution {
public void Solve(ref char[,] board, int top_left_x, int top_left_y, int bottom_right_x, int bottom_right_y) {
// termination condition
if (bottom_right > top_left) return
// Take the elements along the border of the board
// 0th row
// last col
// n-1th row
// first col
If any element has an adjacency with Y, mark it Y
// Recurse with the inner board ( current board without the border)
Solve(ref b, top_left_x + 1, top_left_y + 1, bottom_right_x - 1, bottom_right_y -1)
}
}
#codingexercise
Double GetNthRootProductAlternateTermRaisedPDividedQoverPTimesQ PminusQ(Double [] A,Double p, Double q)
{
If ( A== null) return 0;
Return A.NthRootProductAlternateTermRaisedPDividedQoverPTimesQPminusQ(p, q);
}
No comments:
Post a Comment