Skip to content

Commit 84706c3

Browse files
committed
feat: update solutions to leetcode problem: No.0832
1 parent 8b2c308 commit 84706c3

File tree

5 files changed

+156
-44
lines changed

5 files changed

+156
-44
lines changed

solution/0800-0899/0832.Flipping an Image/README.md

+59-1
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,80 @@
4040

4141
<!-- 这里可写通用的实现逻辑 -->
4242

43+
遍历矩阵每一行,利用双指针 p, q 进行水平交换翻转,顺便反转图像(1 变 0,0 变 1:`1 ^ 1` = 0,`0 ^ 1` = 1)。
44+
4345
<!-- tabs:start -->
4446

4547
### **Python3**
4648

4749
<!-- 这里可写当前语言的特殊实现逻辑 -->
4850

4951
```python
50-
52+
class Solution:
53+
def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
54+
m, n = len(A), len(A[0])
55+
for i in range(m):
56+
p, q = 0, n - 1
57+
while p < q:
58+
t = A[i][p] ^ 1
59+
A[i][p] = A[i][q] ^ 1
60+
A[i][q] = t
61+
p += 1
62+
q -= 1
63+
if p == q:
64+
A[i][p] ^= 1
65+
return A
5166
```
5267

5368
### **Java**
5469

5570
<!-- 这里可写当前语言的特殊实现逻辑 -->
5671

5772
```java
73+
class Solution {
74+
public int[][] flipAndInvertImage(int[][] A) {
75+
int m = A.length, n = A[0].length;
76+
for (int i = 0; i < m; ++i) {
77+
int p = 0, q = n - 1;
78+
while (p < q) {
79+
int t = A[i][p] ^ 1;
80+
A[i][p] = A[i][q] ^ 1;
81+
A[i][q] = t;
82+
++p;
83+
--q;
84+
}
85+
if (p == q) {
86+
A[i][p] ^= 1;
87+
}
88+
}
89+
return A;
90+
}
91+
}
92+
```
5893

94+
### **C++**
95+
96+
```cpp
97+
class Solution {
98+
public:
99+
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
100+
int m = A.size(), n = A[0].size();
101+
for (int i = 0; i < m; ++i) {
102+
int p = 0, q = n - 1;
103+
while (p < q) {
104+
int t = A[i][p] ^ 1;
105+
A[i][p] = A[i][q] ^ 1;
106+
A[i][q] = t;
107+
++p;
108+
--q;
109+
}
110+
if (p == q) {
111+
A[i][p] ^= 1;
112+
}
113+
}
114+
return A;
115+
}
116+
};
59117
```
60118
61119
### **...**

solution/0800-0899/0832.Flipping an Image/README_EN.md

+57-1
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,69 @@ Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
5252
### **Python3**
5353

5454
```python
55-
55+
class Solution:
56+
def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
57+
m, n = len(A), len(A[0])
58+
for i in range(m):
59+
p, q = 0, n - 1
60+
while p < q:
61+
t = A[i][p] ^ 1
62+
A[i][p] = A[i][q] ^ 1
63+
A[i][q] = t
64+
p += 1
65+
q -= 1
66+
if p == q:
67+
A[i][p] ^= 1
68+
return A
5669
```
5770

5871
### **Java**
5972

6073
```java
74+
class Solution {
75+
public int[][] flipAndInvertImage(int[][] A) {
76+
int m = A.length, n = A[0].length;
77+
for (int i = 0; i < m; ++i) {
78+
int p = 0, q = n - 1;
79+
while (p < q) {
80+
int t = A[i][p] ^ 1;
81+
A[i][p] = A[i][q] ^ 1;
82+
A[i][q] = t;
83+
++p;
84+
--q;
85+
}
86+
if (p == q) {
87+
A[i][p] ^= 1;
88+
}
89+
}
90+
return A;
91+
}
92+
}
93+
```
6194

95+
### **C++**
96+
97+
```cpp
98+
class Solution {
99+
public:
100+
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
101+
int m = A.size(), n = A[0].size();
102+
for (int i = 0; i < m; ++i) {
103+
int p = 0, q = n - 1;
104+
while (p < q) {
105+
int t = A[i][p] ^ 1;
106+
A[i][p] = A[i][q] ^ 1;
107+
A[i][q] = t;
108+
++p;
109+
--q;
110+
}
111+
if (p == q) {
112+
A[i][p] ^= 1;
113+
}
114+
}
115+
return A;
116+
}
117+
};
62118
```
63119
64120
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
class Solution {
2-
public:
3-
vector<vector<int>> flipAndInvertImage(vector<vector<int>> &A) {
4-
5-
int temp, Len = A[0].size();
6-
7-
for (int i = 0; i < A.size(); i++)
8-
{
9-
for (int j = 0; j < ((Len + 1) / 2); j++)
10-
{
11-
temp = !A[i][j];
12-
A[i][j] = !A[i][Len - j - 1];
13-
A[i][Len - j - 1] = temp;
2+
public:
3+
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
4+
int m = A.size(), n = A[0].size();
5+
for (int i = 0; i < m; ++i) {
6+
int p = 0, q = n - 1;
7+
while (p < q) {
8+
int t = A[i][p] ^ 1;
9+
A[i][p] = A[i][q] ^ 1;
10+
A[i][q] = t;
11+
++p;
12+
--q;
13+
}
14+
if (p == q) {
15+
A[i][p] ^= 1;
1416
}
1517
}
1618
return A;
1719
}
18-
};
20+
};
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
class Solution {
22
public int[][] flipAndInvertImage(int[][] A) {
3-
for (int[] arr : A) {
4-
reverse(arr, 0, arr.length - 1);
5-
for (int i = 0; i < arr.length; ++i) {
6-
arr[i] ^= 1;
3+
int m = A.length, n = A[0].length;
4+
for (int i = 0; i < m; ++i) {
5+
int p = 0, q = n - 1;
6+
while (p < q) {
7+
int t = A[i][p] ^ 1;
8+
A[i][p] = A[i][q] ^ 1;
9+
A[i][q] = t;
10+
++p;
11+
--q;
12+
}
13+
if (p == q) {
14+
A[i][p] ^= 1;
715
}
816
}
917
return A;
1018
}
11-
12-
private void reverse(int[] arr, int i, int j) {
13-
while (i < j) {
14-
swap(arr, i++, j--);
15-
}
16-
}
17-
18-
private void swap(int[] arr, int i, int j) {
19-
int tmp = arr[i];
20-
arr[i] = arr[j];
21-
arr[j] = tmp;
22-
}
23-
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
class Solution:
2-
def flipAndInvertImage(self, A):
3-
"""
4-
:type A: List[List[int]]
5-
:rtype: List[List[int]]
6-
"""
7-
8-
Len = len(A[0])
9-
10-
for row in A:
11-
for i in range( (Len + 1) // 2 ):
12-
row[i], row[Len - i - 1] = int(not row[Len - i - 1]), int(not row[i])
13-
2+
def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
3+
m, n = len(A), len(A[0])
4+
for i in range(m):
5+
p, q = 0, n - 1
6+
while p < q:
7+
t = A[i][p] ^ 1
8+
A[i][p] = A[i][q] ^ 1
9+
A[i][q] = t
10+
p += 1
11+
q -= 1
12+
if p == q:
13+
A[i][p] ^= 1
1414
return A

0 commit comments

Comments
 (0)