力扣566(java)-重塑矩阵(简单)

题目:

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

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

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

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

提示:

m == mat.length
n == mat[i].length
1 <= m, n <= 100
-1000 <= mat[i][j] <= 1000
1 <= r, c <= 300

解题思路:

一、

利用队列先进先出的特点

  • 首先判断新数组个数与原数组个数是否一致,不一致就无法重塑,返回原数组;
  • 一致就可以变换为新数组,先把原数组的值存入到队列中,然后在将队列中的数移出来存放在新数组中。

代码:

 

 二、

将二维数组映射成一维数组,然后将一维数组映射回r行c列的二维数组

  • 首先判断新数组个数与原数组个数是否一致,不一致就无法重塑,返回原数组;
  • 对于 i ∈[0,mn),第 i 个元素在res数组中对应的下标为 (i / n, i\% n),而在新的重塑矩阵中对应的下标为 (i / c, i% c),然后直接进行赋值即可。

代码:

 

小知识:

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

1.队列的初始化

  Queue<Integer> queue = new LinkedList<Integer>();

2.remove()方法,是返回第一个元素,并在队列中删除返回的对象,并且remove方法会在队列为空的时候抛异常。

 

posted on 2022-04-23 09:56  我不想一直当菜鸟  阅读(46)  评论(0编辑  收藏  举报