[LeetCode]566. Reshape the Matrix 解题报告(C++)
题目描述
In 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 number and column number of the wanted reshaped matrix, respectively.
The reshaped matrix need to be filled with all the elements of the original matrix in the same row-traversing order as they were.
If the ‘reshape’ operation with given 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 of the given matrix is in range [1, 100].
- The given r and c are all positive.
题目大意
- 将一个矩阵转按行的顺序转换成制定的 行列形式
解题思路:
解法1:
- 找到坐标的对应关系.直接赋值
解法2:
- 利用队列的性质
FIFO
, 使用额外空间
代码实现
// 解法1:
vector<vector<int>> matrixReshape1(vector<vector<int>>& nums, int r, int c) {
int row = nums.size();
int col = nums[0].size();
vector<vector<int>> result;
result.resize(r);
for (int i = 0; i < r; i++) {
result[i].resize(c);
}
if (r*c != row*col) {
return nums;
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
int index = i*col + j;
int m = index / c;
int n = index - m*c;
result[m][n] = nums[i][j];
}
}
return result;
}
// 解法2:
vector<vector<int>> matrixReshape2(vector<vector<int>>& nums, int r, int c) {
int row = nums.size();
int col = nums[0].size();
vector<vector<int>> result;
result.resize(r);
for (int i = 0; i < r; i++) {
result[i].resize(c);
}
if (r*c != row*col) {
return nums;
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
int index = i*col + j;
int m = index / c;
int n = index - m*c;
result[m][n] = nums[i][j];
}
}
return result;
}
小结
- 注意 适合的数据结构的使用!!!