zoukankan      html  css  js  c++  java
  • 566. 重塑矩阵『简单』

    题目来源于力扣(LeetCode

    一、题目

    566. 重塑矩阵

    题目相关标签:数组

    注意:

    1. 给定矩阵的宽和高范围在 [1, 100]。
    2. 给定的 r 和 c 都是正数。

    二、解题思路

    2.1 list 列表存取方式

    1. 遍历 nums 数组中的元素,存储到 list 列表中

    2. 判断 list 列表中的元素个数是否等于 r 乘 c 组成的矩阵能够存储的元素个数

    3. 元素个数不相等时,即无法转换成新矩阵,返回原矩阵

    4. 创建 r * c 的矩阵,即二维数组,并进行遍历

    5. 逐个取出 list 列表中的元素,存储到遍历的二维数组中

    2.2 数组元素存储到另一个二维数组

    1. 判断 nums 矩阵中的元素个数是否正好等于 r 乘 c 组成的矩阵能够存储的元素个数

    2. nums 矩阵正好可以转换成新矩阵时,遍历 nums 矩阵,进行转换的操作

    3. 关键点:如何控制新矩阵的索引

    4. 定义变量 count 记录已经存储的元素个数

    5. 应该存入的行 = count / 新数组的列数,应该存入的列 = count % 新数组的列数

    三、代码实现

    3.1 list 列表存取方式

    public static int[][] matrixReshape(int[][] nums, int r, int c) {
        // r 与 c 组成新矩阵的元素个数
        int product = r * c;
        List<Integer> list = new ArrayList<>();
    
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[i].length; j++) {
                // 二维数组中的元素加入到 list 列表中,方便后续的取出元素
                list.add(nums[i][j]);
            }
        }
        // 判断 list 中元素的个数与新矩阵的元素个数大小(乘积)是否相等
        if (list.size() != product) {
            // 不相等时说明无法转换,输出原矩阵
            return nums;
        }
        // list 列表的索引,从 0 开始
        int i = 0;
        int[][] ans = new int[r][c];
        for (int j = 0; j < r; j++) {
            for (int k = 0; k < c; k++) {
                // 将 list 中的元素添加到新创建的矩阵中
                ans[j][k] = list.get(i++);
            }
        }
        return ans;
    }
    

    3.2 数组元素存储到另一个二维数组

    public static int[][] matrixReshape(int[][] nums, int r, int c) {
        int m = nums.length;
        int n = nums[0].length;
        // nums 中的元素个数不等于 r * c 时,返回原矩阵
        if (m * n != r * c) {
            return nums;
        }
    
        int count = 0;
        int[][] ans = new int[r][c];
        // 遍历二维数组
        for (int[] row : nums) {
            for (int num : row) {
                // 二维数组中的元素,转到另一个二维数组,当存储的元素个数大于列数时,换行
                // 应该存入的行 =  count / 新数组的列数
                // 应该存入的列 =  count % 新数组的列数
                ans[count / c][count % c] = num;
                // 每次遍历都记录已经存储的元素个数
                count ++;
            }
        }
        return ans;
    }
    

    四、执行用时

    4.1 list 列表存取方式

    4.2 数组元素存储到另一个二维数组

    五、部分测试用例

    public static void main(String[] args) {
        int[][] nums = {{1, 2}, {3, 4}};
        int r = 1, c = 4;  // output:{{1, 2, 3, 4}}
    
    //    int[][] nums = {{1, 2}, {3, 4}};
    //    int r = 2, c = 4;  // output:{{1, 2}, {3, 4}}
        int[][] result = matrixReshape(nums, r, c);
        System.out.println(Arrays.toString(result));
    }
    
  • 相关阅读:
    Asp.net web服务处理程序(第六篇)
    Asp.net 处理程序(第五篇)
    HttpApplication实战大文件上传 (第四篇)
    HttpApplication处理对象与HttpModule处理模块 (第三篇)
    Asp.net管道 (第二篇)
    HTTP -> Asp.net (第一篇)
    C# 计划任务
    认识元数据和IL(下)<第五篇>
    认识元数据和IL(中)<第四篇>
    认识元数据和IL(上) <第三篇>
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12953620.html
Copyright © 2011-2022 走看看