832. Flipping an Image
题目
Given a binary matrix A
, we want to flip the image horizontally, then invert it, and return the resulting image.
To flip an image horizontally means that each row of the image is reversed. For example, flipping [1, 1, 0]
horizontally results in [0, 1, 1]
.
To invert an image means that each 0
is replaced by 1
, and each 1
is replaced by 0
. For example, inverting [0, 1, 1]
results in [1, 0, 0]
.
Example 1:
Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
Example 2:
Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Notes:
1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1
解决
需要我们现将矩阵水平翻转,再实现倒置(将矩阵中的1
变为0
,0
变为1
)。我们在解决的时候可以将两者结合在一起完成。
设矩阵大小为n*n。
- 时间复杂度:O(n*n)
- 空间复杂度:O(n*n)
class Solution {
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
int n = A.size();
vector<vector<int>> result;
for (int i = 0; i < n; i++) {
// 用于储存处理好的结果
vector<int> temp;
// 倒叙遍历每一行以实现水平翻转
for (int j = n - 1; j >= 0; j--) {
// 实现倒置
if (A[i][j] == 1) temp.push_back(0);
if (A[i][j] == 0) temp.push_back(1);
}
result.push_back(temp);
}
return result;
}
};