题意:把一个矩阵变形成另一个矩阵,如3*4变成2*6。
基本思路:
1. 把矩阵中所有元素放在一个一维数组中,然后把一位数组中的数保存在新矩阵中。
2.1中思路并没有什么问题,但是用了多余的空间,实际上c语言中二维数组仍然是按行优先模式的一维数组保存的。而保存的时候只需要将行数读出来保存在新数组中。
代码如下:
1 class Solution { 2 public: 3 vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) { 4 int h = nums.size(); 5 int w = nums[0].size(); 6 if(h*w != r*c) return nums; 7 vector<vector<int>> new1(r,vector<int>(c,0)); 8 int m=0 , n=0; 9 for(int i = 0; i < h; ++i) 10 { 11 for(int j = 0; j < w;++j) 12 { 13 new1[m][n++] = nums[i][j]; 14 if(n == c) 15 { 16 ++m; 17 n = 0; 18 } 19 } 20 } 21 return new1; 22 } 23 };