目录
牛客_MT2棋子翻转_模拟
描述:
在 4x4 的棋盘上摆满了黑白棋子,黑白两色棋子的位置和数目随机,其中0代表白色,1代表黑色;左上角坐标为 (1,1) ,右下角坐标为 (4,4) 。
现在依次有一些翻转操作,要对以给定翻转坐标(x,y)(也即第x行第y列)为中心的上下左右四个棋子的颜色进行翻转。
给定两个数组 A 和 f ,分别代表 初始棋盘 和 哪些要进行翻转的位置(x,y) ,请返回经过所有翻转操作后的棋盘。
例如输入[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]时,初始键盘如下图所示:
对应的输出为[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]],如下图所示:
题目解析
模拟即可。注意点:
- 如何访问上下左右四个方向。
- 访问的时候不要越界。
- 下标的对应关系。
- 如何优雅地翻转。
C++代码
class Solution {
public:
vector<vector<int> > flipChess(vector<vector<int> >& A, vector<vector<int> >& f) {
int dx[4] = {0, 0, -1, 1};
int dy[4] = {1, -1, 0, 0};
for(auto& e : f) // 简单模拟
{
int sr = e[0] - 1, sc = e[1] - 1;
for(int i = 0; i < 4; ++i)
{
int x = dx[i] + sr, y = dy[i] + sc;
if(x >= 0 && x < 4 && y >= 0 && y < 4)
{
if(A[x][y] == 0)
A[x][y] = 1;
else
A[x][y] = 0;
}
}
}
return A;
}
};
Java代码
import java.util.*;
public class Solution
{
int[] dx = {0, 0, 1, -1};
int[] dy = {1, -1, 0, 0};
public int[][] flipChess (int[][] A, int[][] f)
{
for(int[] i : f)
{
int a = i[0] - 1, b = i[1] - 1;
for(int j = 0; j < 4; j++)
{
int x = a + dx[j], y = b + dy[j];
if(x >= 0 && x < 4 && y >= 0 && y < 4)
{
A[x][y] ^= 1;
}
}
}
return A;
}
}
标签:Java,OJ,MT2,int,棋子,&&,dy,dx,翻转
From: https://blog.csdn.net/GRrtx/article/details/144043125