zoukankan      html  css  js  c++  java
  • LeetCode

    链接

    566. Reshape the Matrix

    题意

    给定一个矩阵和新的行数和列数。输出变形后的矩阵。

    思路

    利用给定的行数和列数构造一个二维数组,再将原矩阵中的数一个一个进行填充。

    代码

    Java 1:

    public class Solution {
        public int[][] matrixReshape(int[][] nums, int r, int c) {
            if (r * c != nums.length * nums[0].length) return nums;
            int[][] res = new int[r][c];
            int[] temp = new int[nums.length * nums[0].length];
            int count = 0;
            for (int i = 0; i < nums.length; i++) {
                for (int j = 0; j < nums[0].length; j++) {
                    temp[count++] = nums[i][j];
                }
            }
            count = 0;
            for (int i = 0; i < r; i++) {
                for (int j = 0; j < c; j++) {
                    res[i][j] = temp[count++];              
                }
            }
            return res;
        }
    }
    

    改进代码:

    public class Solution {
        public int[][] matrixReshape(int[][] nums, int r, int c) {
            int n = nums.length, m = nums[0].length, k = 0;
            if (r*c != n*m) return nums;
            int[][] res = new int[r][c];
            for (int i=0;i<r;i++) 
                for (int j=0;j<c;j++,k++) 
                    res[i][j] = nums[k/m][k%m];
            return res;
        }
    }
    
    

    思考

    第一个代码的填充确实弄复杂了一些,利用k/m和k%m可以很好解决新矩阵的行号和列号问题

  • 相关阅读:
    设计模式
    工厂方法模式
    简单工厂模式
    tornado自定义Form组件
    tornado
    Tornado框架的知识系列
    Linux基本命令
    day2
    day1
    使用cp复制文件夹却不能打开
  • 原文地址:https://www.cnblogs.com/zyoung/p/6845729.html
Copyright © 2011-2022 走看看