首先有一点要知道的时vector<vector<int>>ans 的结构并不等于二维数组array[][],不能直接赋值或者是直接用二维数组初始化的方式来初始化ans。
如果在for循环中直接调用ans[i][j]这种直接将二维vector直接当二维数组调用时,因为这里的ans并没有分配确切的空间大小(即多长多宽的矩阵),直接进行读取就会造成数组越界、空指针异常。
若想要像直接像二维数组那样使用下标调用二维vector,在创建时就要确切的分配开辟空间的大小:vector<vector<int>>ans(r,vector<int>(c));
最终代码:
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
int n = mat.size();
int m = mat[0].size();
if(n * m != r * c) return mat;
if(n == 0 || m == 0) return mat;
// cout << r << ' '<< c << endl;
vector<vector<int>> ans(r,vector<int>(c));
int i = 0,j = 0;
for(int x = 0;x < r;x++)
{
for(int y = 0;y < c;y++)
{
if(j == m)
{
j = 0;
i ++;
}
ans[x][y] = mat[i][j];
j++;
}
}
return ans;
}
};