✨题目链接:
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]],如下图所示:
✨解题思路
- 每获得一次坐标,把四个位置都设置一遍即可
- 需要 注意判断边界情况
- 注意:f 数组中给的是坐标值 所以传参时要 -1
✨代码
class Solution {
public:
void reversecolor(vector<vector<int> >& A, int x,int y)
{
//上
if(x-1>=0)
{
A[x-1][y]==0?A[x-1][y]=1:A[x-1][y]=0;
}
//下
if(x+1<4)
{
A[x+1][y]==0?A[x+1][y]=1:A[x+1][y]=0;
}
//左
if(y-1>=0)
{
A[x][y-1]==0?A[x][y-1]=1:A[x][y-1]=0;
}
//右
if(y+1<4)
{
A[x][y+1]==0?A[x][y+1]=1:A[x][y+1]=0;
}
}
vector<vector<int> > flipChess(vector<vector<int> >& A, vector<vector<int> >& f) {
for(int i=0;i<f.size();i++)
{
reversecolor(A, f[i][0]-1,f[i][1]-1);
}
return A;
}
};
※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持