n MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new one with different size but keep its original data.
You're given a matrix represented by a two-dimensional array, and two positive integers r and c representing the row numberand column numberofthe wanted reshaped matrix, respectively.
The reshaped matrix need to be filled with all the elements ofthe original matrix inthe same row-traversing order as they were.
If the 'reshape' operation withgiven parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.
Example 1:
Input:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.
Example 2:
Input:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
Output:
[[1,2],
[3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.
Note:
The height and width ofthegiven matrix isin range [1, 100].
The given r and c are all positive.
二、解法:
class Solution {
/*
首先观察一下这个矩阵:
vector<vector<int>> nums = { {1,2},{3,4},{5,6},{7,8} };
它的行数 r=4;它的列数 c=2;
假如使得 r=2,c=4 则 nums变换为
nums = { {1,2,3,4},{5,6,7,8} };
找规律发现 r控制数组个数,c控制每个数组元素个数
现在根据i 找出它所在的行数 ,列数
分别是 :i/c,i%c。
*/public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c)
{
int m = nums.size(), n = nums[0].size(), o = m * n;
if (r * c != o) return nums;
vector<vector<int>> res(r, vector<int>(c, 0));
for (int i = 0; i < o; i++) res[i / c][i % c] = nums[i / n][i % n];
return res;
}
};