LeetCode 566、重塑矩阵(c++)(0基础也可看懂附带语法)(官方数据结构入门计划第七题)

128 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。

 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。 

 重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。 

 如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

输入:mat = [[1,2],[3,4]], r = 1, c = 4
输出:[[1,2,3,4]]



输入:mat = [[1,2],[3,4]], r = 2, c = 4
输出:[[1,2],[3,4]]

提示: m == mat.length n == mat[i].length 1 <= m, n <= 100 -1000 <= mat[i][j] <= 1000 1 <= r, c <= 300

[1]、直接法 

直接想直接做就行,难就难在初始化数组vector<vector>res(r,vector(c,0));这个部分其他不难

class Solution {public:    vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {          int m=mat.size();          int n=mat[0].size();          int row=0;          int col=0;          vector<vector<int>>res(r,vector<int>(c,0));//因为数组可以通过[]访问,所以先限定大小在挨个填充即可          if(r*c!=m*n) return mat;          for(int i=0;i<m;i++){              for(int j=0;j<n;j++){                  if(col==c){                      row++;                      col=0;                  }                  res[row][col]=mat[i][j];                  col++;              }          }         return res;     }};