首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)

Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)

作者头像
racaljk
发布2018-08-31 11:16:31
8960
发布2018-08-31 11:16:31
举报
文章被收录于专栏:racaljkracaljk

Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)

题目描述

在MATLAB中,reshape是一个非常有用的函数,它可以将矩阵变为另一种形状且保持数据不变。 已知一个由二维数组表示的矩阵,和两个正整数r(行),c(列),将这个二维数组变换为r*c的矩阵。

如果不能由原矩阵转换为r*c的矩阵就输出原矩阵,否则输出转换后的矩阵。

测试样例

Input:
nums =
[[1,2],
 [3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]

nums =
[[1,2],
 [3,4]]
r = 2, c = 4
Output:
[[1,2],
 [3,4]]
Explanation:
原2*2矩阵不能变换为2*4矩阵,所以原样输出。

详细分析

考虑将[[1,2],[3,4]]转换为1*4的[1,2,3,4]。 首先我们需要两个循环,将原矩阵数据填入新矩阵

for(int i=0;i<r;i++){
    for(int k=0;k<c;k++){
        ...
    }
}

这里的难点是坐标的变换。它们对照关系如下:

newArr[0][0]=>oldArr[0][0]
newArr[0][1]=>oldArr[0][1]
newArr[0][3]=>oldArr[1][0]
newArr[0][4]=>oldArr[1][1]

这里我们考虑一种中间形式,先把新二维坐标转换为一维坐标,再将一维坐标转换为旧的二维坐标。比如,当我们填入newArr[0][3]时,它的一维坐标是0*c(新矩阵列数)+3,即3,然后3转化为旧的二维坐标就是old[3/原二维列数][3%原二维列数]

代码实现

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        //corner case for empty 2-dimension array
        if(nums.size()==0){
            return nums;
        }
        if(nums[0].size()==0){
            return nums;
        }
        //illegal case
        if(nums.size()*nums[0].size()!=r*c){
            return nums;
        }

        std::vector<std::vector<int>> dv;

        for(int i=0;i<r;i++){
            std::vector<int> v;
            for(int k=0;k<c;k++){
                int p=i*c+k;
                int idx1=p/nums[0].size();
                int idx2=p%nums[0].size();

                v.push_back(nums[idx1][idx2]);
            }
            dv.push_back(v);
        }
        return dv;

    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
    • 题目描述
      • 测试样例
        • 详细分析
          • 代码实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档