力扣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.队列的初始化
Queuequeue = new LinkedList ();
2.remove()方法,是返回第一个元素,并在队列中删除返回的对象,并且remove方法会在队列为空的时候抛异常。