ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

566. 重塑矩阵(数组)

2021-02-17 10:03:11  阅读:203  来源: 互联网

标签:return nums int 矩阵 cols 566 重塑 ans


一、题目描述

在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例 1:
输入:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
输出:
[[1,2,3,4]]
解释:
行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。
示例 2:
输入:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
输出:
[[1,2],
[3,4]]
解释:
没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。
注意:
给定矩阵的宽和高范围在 [1, 100]。
给定的 r 和 c 都是正数。

二、题解
方法一:利用下标

class Solution {
    public int[][] matrixReshape(int[][] nums, int r, int c) {
        int rows = nums.length;
        int cols = nums[0].length;

        if(rows * cols != r * c) return nums;

        int[][] ans = new int[r][c];
        int s = 0,t = 0;
        for(int i = 0;i<r;i++){
            for(int j = 0;j < c;j++){
                ans[i][j] = nums[s][t];
                t++;
                if(t == cols){
                    t = 0;
                    s++;
                }
            }
        }
        return ans;
    }
}

方法二:二维数组的一维表示
二维下标 ( i , j ) → i ∗ c o l s + j (i,j) \rightarrow i*cols+ j (i,j)→i∗cols+j
那么可以将整数 x映射回其在矩阵中的下标
{ i = x / c o l s j = x % c o l s \left\{ \begin{matrix} i = x/cols \\ j = x \%cols \end{matrix} \right. {i=x/colsj=x%cols​

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        int rows = nums.size();
        int cols = nums[0].size();

        if(rows * cols != r * c) return nums;

        vector<vector<int> > ans(r,vector<int>(c,0));

        for(int i=0;i<rows*cols;i++){
            ans[i/c][i%c] = nums[i/cols][i%cols];
        }
        return ans;
    }
};

在这里插入图片描述

标签:return,nums,int,矩阵,cols,566,重塑,ans
来源: https://blog.csdn.net/qq_38748148/article/details/113831128

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有