写点什么

【LeetCode】重塑矩阵 Java 题解

用户头像
HQ数字卡
关注
发布于: 2021 年 02 月 17 日

题目

在 MATLAB 中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。


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


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


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


代码

public class DayCode {    public static void main(String[] args) {        int[][] nums = new int[][]{{1, 2}, {3, 4}};        int r = 1;        int c = 4;        int[][] ans = new DayCode().matrixReshape(nums, r, c);        System.out.println("ans is " + Arrays.deepToString(ans));    }        /**     * https://leetcode-cn.com/problems/reshape-the-matrix/     * @param nums     * @param r     * @param c     * @return     */    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]; int newX = 0; int newY = 0; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { ans[newX][newY] = nums[i][j]; newY++; if (newY >= c) { newX++; newY = 0; } } } return ans; }
/** * https://leetcode-cn.com/problems/reshape-the-matrix/ * @param nums * @param r * @param c * @return */ public int[][] matrixReshape2(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; }}
复制代码

总结

  • 方法一的时间复杂度是 O(n * n),空间复杂度是 O(1)

  • 方法二的时间复杂度是 O(n),空间复杂度是 O(1)

  • 我写的时候,只想到了方法一,没有想到方法二,继续加油!多写多练!


发布于: 2021 年 02 月 17 日阅读数: 11
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】重塑矩阵Java题解