前言
记录几个面试常见题型
一、知识点
二级指针,基础概念不能乱
二、题目
1、832. 翻转图像
1.1 分析
简单一行过
vector 初始化大小要一致
1.2代码
class Solution {
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) {
int n = image.size() , m = image[0].size();
vector<vector<int>> ans(n , vector<int>(m , 0));
if(image.empty())
return {};
for(int i = 0 ; i < n ; i ++)
{
for(int j = 0 ; j < m ; j ++)
{
ans[i][j] = 1 - image[i][m - 1 - j];
}
}
return ans;
}
};
解法二
class Solution {
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
// 水平翻转
for(vector<int>& a : A) {
reverse(a.begin(), a.end());
for(int& single : a) {
single ^= 1;
}
}
return A;
}
};
2、转置矩阵
2.1题目分析
简单不爱,苦难不挨
2.2代码
class Solution {
public:
vector<vector<int>> transpose(vector<vector<int>>& matrix) {
int m = matrix.size(), n = matrix[0].size();
vector<vector<int>> transposed(n, vector<int>(m));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
transposed[j][i] = matrix[i][j];
}
}
return transposed;
}
};
3 566、重置矩阵
3.1题目分析
robust ,不要轻易狗带
3.2代码
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int n = nums.size(), m = nums[0].size();
if (n * m != r * c) return nums;
vector<vector<int>> res(r, vector<int>(c));
for (int i = 0; i < n * m; i ++ )
res[i / c][i % c] = nums[i / m][i % m];
return res;
}
};
4 、一维变二维
4.1题目分析
stl 代码简洁
4.2代码
class Solution {
public:
vector<vector<int>> construct2DArray(vector<int> &original, int m, int n) {
vector<vector<int>> ans;
if (original.size() != m * n) {
return ans;
}
for (auto it = original.begin(); it != original.end(); it += n) {
ans.emplace_back(it, it + n);
}
return ans;
}
};
5 1260、
5.1题目分析
压成一维,在还原成二维,联动上题
5.2代码
class Solution {
public:
vector<vector<int>> shiftGrid(vector<vector<int>>& grid, int k) {
int m = grid.size(), n = grid[0].size();
vector<int> arr(m*n); //按迁移k次后的新位置存储grid的所有元素到一维数组arr
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr[(i * n + j + k) % (m * n)] = grid[i][j];
}
}
vector<vector<int>> ans;
for (auto it =arr.begin(); it != arr.end(); it += n) {
ans.emplace_back(it, it + n);
}
return ans;
}
};
三、做题记录

这篇博客主要介绍了几种常见的矩阵操作题目,包括翻转图像、转置矩阵、重置矩阵以及一维到二维的转换。通过分析和代码实现,详细解释了解题思路和步骤,适合提升编程技巧和算法理解。
552

被折叠的 条评论
为什么被折叠?



