566.重塑矩阵
先开一个 动态数组arr 将原始数组 按行遍历顺序 把元素依次放入这个新的动态数组arr里
arr.push_back(mat[I][j])
matrixReshape是用vector 声明的二维数组
vector<vector> matrixReshape(r,vector?);
//hsz这里其实我有点不明白 为什么这么写 而不是 vector<vector> matrixReshape 这样直接定义一个动态二维数组(搞明白了) //因为需要规定数组大小 不规定的话 返回的时候,会出现空的vector //r是规定大vector元素的长度 c是规定vector里的vector元素的长度
matrixReshape是r行c列 通过两层循环 将arr[cnt++]里的元素一个一个放进去
最后return matrixReshape
需要注意的是 题目中说 若给定的参数合理 则输出新的matrixReshape 否则 输出原始矩阵
则需要添加 判断语句 即判断 二维数组内总元素个数 (原始矩阵mat的行高元素个数相乘)是否与 重塑矩阵元素个数相同
二维数组的行高表示 二维数组的行数:mat.size() 二维数组的列数:mat[0].size()
以下是AC代码
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
if( r*c != mat.size()*mat[0].size())
return mat;
int m = mat.size();
int n = mat[0].size();
vector<int> arr;
for(int i = 0;i<m;i++)
{
for(int j = 0;j<n;j++)
{
arr.push_back(mat[i][j]);
}
}
vector<vector<int>> matrixReshape(r,vector<int>(c));
int cnt = 0;
for(int i = 0;i<r;i++)
{
for(int j = 0;j<c;j++)
{
matrixReshape[i][j] = arr[cnt++];
}
}
return matrixReshape;
}
};
|