LeetCode——566。マトリックスの形状を変更する[マトリックスの形状を変更する] [シンプル]-分析とコード[Java]
1.トピック
MATLABには、非常に便利な関数reshapeがあります。これは、行列を異なるサイズの別の新しい行列に再形成できますが、元のデータは保持します。
2次元配列で表される行列と、2つの正の整数rおよびcが与えられます。これらはそれぞれ、目的の再構成された行列の行と列の数を表します。
再構築された行列は、元の行列のすべての要素を同じ行走査順序で埋める必要があります。
指定されたパラメーターを使用した形状変更操作が実行可能で合理的である場合、新しい形状変更行列が出力されます。それ以外の場合、元の行列が出力されます。
例1:
输入:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
输出:
[[1,2,3,4]]
解释:
行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。
例2:
输入:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
输出:
[[1,2],
[3,4]]
解释:
没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。
注意:
- 特定の行列の幅と高さは[1、100]の範囲です。
- 与えられたrとcは両方とも正の数です。
出典:LeetCode
リンク:https://leetcode-cn.com/problems/reshape-the-matrix
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
2、分析とコード
1.直接変換
(1)考える
マトリックスの再形成の実現可能性は、要素の数が等しいかどうかによって判断され、要件が満たされている場合は、元のマトリックスの数が新しいマトリックスに順番に入力されます。
(2)コード
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int r0 = nums.length, c0 = nums[0].length, n = r0 * c0;
if (r * c != n)
return nums;
//重塑矩阵
int[][] outputMatrix = new int[r][c];
for (int i = 0; i < n; i++)
outputMatrix[i / c][i % c] = nums[i / c0][i % c0];
return outputMatrix;
}
}
(3)結果
実行時間:2ミリ秒、
すべてのJava送信でユーザーの47.97%を上回っています。メモリ消費量:39.8 MB、すべてのJava送信でユーザーの13.11%を上回っています。
3、その他
何もありません。