566. 重塑矩阵

https://leetcode-cn.com/problems/reshape-the-matrix/

解法一:

思路:主要还是坐标变换,不管是mn还是rc的矩阵,其展开成一维的数组时都有对应的唯一坐标转换映射.可以理解为先将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

最后更新于