https://leetcode-cn.com/problems/reshape-the-matrix/
思路:主要还是坐标变换,不管是m_n还是r_c的矩阵,其展开成一维的数组时都有对应的唯一坐标转换映射.可以理解为先将m*n矩阵映射到一维,再从一维映射到r*c,找好映射关系即可. 还有要注意的就是嵌套vector的初始化,没想到还能这么玩.
//cpp
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int m = nums.size(); // // 原矩阵的行数
int n = nums[0].size(); // 原矩阵的列数
if (r*c != m*n) return nums;
vector<vector<int>> result(r, vector<int>(c)); // 嵌套vector初始化
for (int i = 0; i < r*c; i++) {
result[i/c][i%c] = nums[i/n][i%n]; // 坐标转换
}
return result;
}
};
#python
class Solution:
def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]:
m, n = len(nums), len(nums[0])
if r*c != m*n: #不符合则返回原矩阵
return nums
res = [[0] * c for _ in range(r)]
for i in range(r*c):
res[i//c][i%c] = nums[i//n][i%n]
return res