打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
重塑矩阵

题目概述

给出一个由二维数组表示的矩阵,以及两个正整数 r 和 c,分别表示想要的重构的矩阵的行数和列数

重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充

如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵

示例一如下:

输入: 
nums = [[1,2],[3,4]]
r = 1, c = 4
输出: 
[[1,2,3,4]]
解释:
行遍历 nums 的结果是 [1,2,3,4],新的矩阵是 1 * 4 矩阵,用之前的元素值一行一行填充新矩阵

示例二如下:

输入: 
nums = [[1,2],[3,4]]
r = 2, c = 4
输出: 
[[1,2],[3,4]]
解释:
没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵

解题思路

最简单的思路,遍历原数组,将元素放进新数组里边,设置两个标志位防止下标越界

class Solution {
    public int[][] matrixReshape(int[][] nums, int r, int c) {
        int row = nums.length;
        int col = nums[0].length;
        int eleCount = row * col;
        if(eleCount != r * c) {
            return nums;
        }
        int colFlag = 0;
        int rowFlag = 0;
        int[][] newNums = new int[r][c];
        for(int i = 0; i < row; i++) {
            for(int j = 0; j < col; j++) {
                if(colFlag == c) {
                    rowFlag++;
                    colFlag = 0;
                }
                newNums[rowFlag][colFlag] = nums[i][j];
                colFlag++;
            }
        }
        return newNums;
    }
}

另一种思路是按照下面的规则直接将元素映射到新数组中

  • 设 nums 为 m 行 n 列,x = m * n,我们可以将整数 x 映射回其在矩阵中的下标,即
    • i = x / n
    • j = x % n
class Solution {
    public int[][] matrixReshape(int[][] nums, int r, int c) {
        int m = nums.length;
        int n = nums[0].length;
        if (m * n != r * c) {
            return nums;
        }
        int[][] ans = new int[r][c];
        for (int x = 0; x < m * n; ++x) {
            ans[x / c][x % c] = nums[x / n][x % n];
        }
        return ans;
    }
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
查找数组中未出现的数
​LeetCode刷题实战283:移动零
利用函数求出一个数组最大三个数的乘积
Leetcode刷题之两数之和(1)
519,单调栈解下一个更大元素 I
LeetCode 665.非递减数列
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服