题目
标题和出处
标题:转置矩阵
出处:867. 转置矩阵
难度
1 级
题目描述
要求
给你一个二维整数数组 matrix \texttt{matrix} matrix,返回 matrix \texttt{matrix} matrix 的转置矩阵。
矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例
示例 1:
输入:
matrix
=
[[1,2,3],[4,5,6],[7,8,9]]
\texttt{matrix = [[1,2,3],[4,5,6],[7,8,9]]}
matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:
[[1,4,7],[2,5,8],[3,6,9]]
\texttt{[[1,4,7],[2,5,8],[3,6,9]]}
[[1,4,7],[2,5,8],[3,6,9]]
示例 2:
输入:
matrix
=
[[1,2,3],[4,5,6]]
\texttt{matrix = [[1,2,3],[4,5,6]]}
matrix = [[1,2,3],[4,5,6]]
输出:
[[1,4],[2,5],[3,6]]
\texttt{[[1,4],[2,5],[3,6]]}
[[1,4],[2,5],[3,6]]
数据范围
- m = matrix.length \texttt{m} = \texttt{matrix.length} m=matrix.length
- n = matrix[i].length \texttt{n} = \texttt{matrix[i].length} n=matrix[i].length
- 1 ≤ m , n ≤ 1000 \texttt{1} \le \texttt{m}, \texttt{n} \le \texttt{1000} 1≤m,n≤1000
- 1 ≤ m × n ≤ 10 5 \texttt{1} \le \texttt{m} \times \texttt{n} \le \texttt{10}^\texttt{5} 1≤m×n≤105
- -10 9 ≤ matrix[i][j] ≤ 10 9 \texttt{-10}^\texttt{9} \le \texttt{matrix[i][j]} \le \texttt{10}^\texttt{9} -109≤matrix[i][j]≤109
解法
思路和算法
已知矩阵 matrix \textit{matrix} matrix 为 m m m 行 n n n 列。记矩阵 matrix \textit{matrix} matrix 转置后的矩阵是 matrix T \textit{matrix}^\text{T} matrixT,则 matrix T \textit{matrix}^\text{T} matrixT 的行数等于 matrix \textit{matrix} matrix 的列数, matrix T \textit{matrix}^\text{T} matrixT 的列数等于 matrix \textit{matrix} matrix 的行数,即转置后的矩阵是 n n n 行 m m m 列,且 matrix T [ j ] [ i ] = matrix [ i ] [ j ] \textit{matrix}^\text{T}[j][i]=\textit{matrix}[i][j] matrixT[j][i]=matrix[i][j],其中 0 ≤ i < m 0 \le i < m 0≤i<m, 0 ≤ j < n 0 \le j < n 0≤j<n。
创建 n n n 行 m m m 列的转置矩阵,然后将原矩阵中的元素赋值到转置矩阵中的对应位置即可。
代码
class Solution {
public int[][] transpose(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
int[][] transposed = new int[n][m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
transposed[j][i] = matrix[i][j];
}
}
return transposed;
}
}
复杂度分析
-
时间复杂度: O ( m n ) O(mn) O(mn),其中 m m m 和 n n n 分别是矩阵 matrix \textit{matrix} matrix 的行数和列数。转置矩阵需要遍历原矩阵中的每个元素。
-
空间复杂度: O ( 1 ) O(1) O(1)。除了返回值以外,使用的空间复杂度是常数。