Input: grid =[[1,0,0],[0,0,0],[0,0,1]]Output: 2Explanation:
Flipping the highlighted cells makes all the rows palindromic.
Input: grid =[[0,1],[0,1],[0,0]]Output: 1Explanation:
Flipping the highlighted cell makes all the columns palindromic.
To make all rows or all columns palindromic, for each row or column, we only need to flip cells that break the palindrome property. For each row, compare symmetric cells and count mismatches; similarly for columns. The minimum flips needed is the minimum of total flips for all rows and all columns.
classSolution {
public:int minFlips(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
int row_flips =0, col_flips =0;
for (int i =0; i < m; ++i) {
for (int l =0, r = n-1; l < r; ++l, --r) {
if (grid[i][l] != grid[i][r]) row_flips++;
}
}
for (int j =0; j < n; ++j) {
for (int t =0, b = m-1; t < b; ++t, --b) {
if (grid[t][j] != grid[b][j]) col_flips++;
}
}
returnmin(row_flips, col_flips);
}
};
funcminFlips(grid [][]int) int {
m, n:= len(grid), len(grid[0])
rowFlips, colFlips:=0, 0fori:=0; i < m; i++ {
forl, r:=0, n-1; l < r; l, r = l+1, r-1 {
ifgrid[i][l] !=grid[i][r] {
rowFlips++ }
}
}
forj:=0; j < n; j++ {
fort, b:=0, m-1; t < b; t, b = t+1, b-1 {
ifgrid[t][j] !=grid[b][j] {
colFlips++ }
}
}
ifrowFlips < colFlips {
returnrowFlips }
returncolFlips}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution {
publicintminFlips(int[][] grid) {
int m = grid.length, n = grid[0].length;
int rowFlips = 0, colFlips = 0;
for (int i = 0; i < m; ++i)
for (int l = 0, r = n-1; l < r; ++l, --r)
if (grid[i][l]!= grid[i][r]) rowFlips++;
for (int j = 0; j < n; ++j)
for (int t = 0, b = m-1; t < b; ++t, --b)
if (grid[t][j]!= grid[b][j]) colFlips++;
return Math.min(rowFlips, colFlips);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
funminFlips(grid: Array<IntArray>): Int {
val m = grid.size
val n = grid[0].size
var rowFlips = 0var colFlips = 0for (i in0 until m)
for (l in0 until n/2)
if (grid[i][l] != grid[i][n-1-l]) rowFlips++for (j in0 until n)
for (t in0 until m/2)
if (grid[t][j] != grid[m-1-t][j]) colFlips++return minOf(rowFlips, colFlips)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution:
defminFlips(self, grid: list[list[int]]) -> int:
m: int = len(grid)
n: int = len(grid[0])
row_flips: int =0 col_flips: int =0for i in range(m):
for l in range(n//2):
if grid[i][l] != grid[i][n-1-l]:
row_flips +=1for j in range(n):
for t in range(m//2):
if grid[t][j] != grid[m-1-t][j]:
col_flips +=1return min(row_flips, col_flips)
impl Solution {
pubfnmin_flips(grid: Vec<Vec<i32>>) -> i32 {
let m = grid.len();
let n = grid[0].len();
letmut row_flips =0;
letmut col_flips =0;
for i in0..m {
for l in0..n/2 {
if grid[i][l] != grid[i][n-1-l] {
row_flips +=1;
}
}
}
for j in0..n {
for t in0..m/2 {
if grid[t][j] != grid[m-1-t][j] {
col_flips +=1;
}
}
}
row_flips.min(col_flips)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution {
minFlips(grid: number[][]):number {
constm=grid.length, n=grid[0].length;
letrowFlips=0, colFlips=0;
for (leti=0; i<m; ++i)
for (letl=0; l< Math.floor(n/2); ++l)
if (grid[i][l] !==grid[i][n-1-l]) rowFlips++;
for (letj=0; j<n; ++j)
for (lett=0; t< Math.floor(m/2); ++t)
if (grid[t][j] !==grid[m-1-t][j]) colFlips++;
return Math.min(rowFlips, colFlips);
}
}