MT2. 棋子翻转
描述
示例1
输入:
[[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++ 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2021-12-20
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型vector<vector<>> * @param f int整型vector<vector<>> * @return int整型vector<vector<>> */ set<vector<int>> set; void insert(vector<int> pos, int m, int n){ if(pos[0] >= 1 && pos[0] <= m) if(pos[1] >= 1 && pos[1] <= n){ if(set.find(pos) == set.end()) set.insert(pos); else set.erase(pos); } } vector<vector<int> > flipChess(vector<vector<int> >& A, vector<vector<int> >& f) { // write code here int m = A.size(); int n = A[0].size(); for(auto& pos : f){ vector<int> dm = {0, 0, 1, -1}; vector<int> dn = {1, -1, 0, 0}; for(int i = 0; i < 4; i++){ vector<int> temp(pos); temp[0] += dm[i]; temp[1] += dn[i]; insert(temp, m, n); } } for(auto& pos : set){ int x = pos[0] - 1; int y = pos[1] - 1; A[x][y] = 1 - A[x][y]; } return A; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2022-03-26
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型vector<vector<>> * @param f int整型vector<vector<>> * @return int整型vector<vector<>> */ vector<vector<int> > flipChess(vector<vector<int> >& A, vector<vector<int> >& f) { // write code here for(int i=0;i<f.size();i++){ int x=f[i][0]-1; int y=f[i][1]-1; tran(A,x,y); } return A; } void tran(vector<vector<int>>&a,int x,int y) { if(x-1>=0&&y>=0&&x-1<4&&y<4){ a[x-1][y]=!a[x-1][y]; } if(x+1>=0&&y>=0&&x+1<4&&y<4){ a[x+1][y]=!a[x+1][y]; } if(x>=0&&y-1>=0&&x<4&&y-1<4){ a[x][y-1]=!a[x][y-1]; } if(x>=0&&y+1>=0&&x<4&&y+1<4) a[x][y+1]=!a[x][y+1]; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 416KB, 提交时间: 2022-03-26
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型vector<vector<>> * @param f int整型vector<vector<>> * @return int整型vector<vector<>> */ vector<vector<int> > flipChess(vector<vector<int> >& A, vector<vector<int> >& f) { // write code here for (int i = 0; i < f.size(); i++) { int x = f[i][0] - 1; int y = f[i][1] - 1; // 上 if (x - 1 >= 0) A[x-1][y] ^= 1; // 下 if (x + 1 < 4) A[x+1][y] ^= 1; // 左 if (y - 1 >= 0) A[x][y-1] ^= 1; // 右 if (y + 1 < 4) A[x][y+1] ^= 1; } return A; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2022-03-08
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型vector<vector<>> * @param f int整型vector<vector<>> * @return int整型vector<vector<>> */ vector<vector<int> > flipChess(vector<vector<int> >& A, vector<vector<int> >& f) { // write code here for(int i = 0; i < f.size(); i++){ dfs(A, f[i][0] - 1, f[i][1] - 1); } return A; } void dfs(vector<vector<int> >& A, int i, int j){ if(i - 1 >= 0) A[i - 1][j] = A[i - 1][j] == 0? 1: 0; if(i + 1 < A.size()) A[i + 1][j] = A[i + 1][j] == 0? 1: 0; if(j - 1 >= 0) A[i][j - 1] = A[i][j - 1] == 0? 1: 0; if(j + 1 < A[0].size()) A[i][j + 1] = A[i][j + 1] == 0? 1: 0; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2021-12-10
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型vector<vector<>> * @param f int整型vector<vector<>> * @return int整型vector<vector<>> */ vector<vector<int> > flipChess(vector<vector<int> >& A, vector<vector<int> >& f) { // write code here for(vector<int>& v:f){ v[0]--; v[1]--; if(v[0]-1>=0){ cout<<A[v[0]-1][v[1]]<<','; A[v[0]-1][v[1]]=A[v[0]-1][v[1]]==0?1:0; cout<<A[v[0]-1][v[1]]<<' '; } if(v[0]+1<=3){ cout<<A[v[0]+1][v[1]]<<','; A[v[0]+1][v[1]]=A[v[0]+1][v[1]]==0?1:0; cout<<A[v[0]+1][v[1]]<<' '; } if(v[1]-1>=0){ cout<<A[v[0]][v[1]-1]<<','; A[v[0]][v[1]-1]=A[v[0]][v[1]-1]==0?1:0; cout<<A[v[0]][v[1]-1]<<' '; } if(v[1]+1<=3){ cout<< A[v[0]][v[1]+1]<<','; A[v[0]][v[1]+1]=A[v[0]][v[1]+1]==0?1:0; cout<< A[v[0]][v[1]+1]<<' '; } cout<<endl; } return A; } };