We need to check two conditions for each cell: (1) it is equal to the cell below (if it exists), and (2) it is different from the cell to its right (if it exists). We can scan the grid and check these conditions for every cell.
classSolution {
public:bool satisfiesConditions(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
for (int i =0; i < m; ++i) {
for (int j =0; j < n; ++j) {
if (i +1< m && grid[i][j] != grid[i+1][j]) return false;
if (j +1< n && grid[i][j] == grid[i][j+1]) return false;
}
}
return true;
}
};
classSolution {
publicbooleansatisfiesConditions(int[][] grid) {
int m = grid.length, n = grid[0].length;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (i + 1 < m && grid[i][j]!= grid[i+1][j]) returnfalse;
if (j + 1 < n && grid[i][j]== grid[i][j+1]) returnfalse;
}
}
returntrue;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution {
funsatisfiesConditions(grid: Array<IntArray>): Boolean {
val m = grid.size
val n = grid[0].size
for (i in0 until m) {
for (j in0 until n) {
if (i + 1 < m && grid[i][j] != grid[i+1][j]) returnfalseif (j + 1 < n && grid[i][j] == grid[i][j+1]) returnfalse }
}
returntrue }
}
1
2
3
4
5
6
7
8
9
10
classSolution:
defsatisfiesConditions(self, grid: list[list[int]]) -> bool:
m, n = len(grid), len(grid[0])
for i in range(m):
for j in range(n):
if i +1< m and grid[i][j] != grid[i+1][j]:
returnFalseif j +1< n and grid[i][j] == grid[i][j+1]:
returnFalsereturnTrue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
impl Solution {
pubfnsatisfies_conditions(grid: Vec<Vec<i32>>) -> bool {
let m = grid.len();
let n = grid[0].len();
for i in0..m {
for j in0..n {
if i +1< m && grid[i][j] != grid[i+1][j] {
returnfalse;
}
if j +1< n && grid[i][j] == grid[i][j+1] {
returnfalse;
}
}
}
true }
}