给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。
矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]
示例 2:
输入:matrix = [[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]
这道题其实很简单,只要把相对应的位置上的数字交换就可以。
/**
* @param {number[][]} matrix
* @return {number[][]}
*/
var transpose = function(matrix) {
const m = matrix.length, n = matrix[0].length;
//给 transposed 数组的每一项赋值为0
const transposed = new Array(n).fill(0).map(() => new Array(m).fill(0));
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
transposed[j][i] = matrix[i][j];
}
}
return transposed;
};
但在题解中又看到了更加绝妙的方法。
var transpose = function(matrix) {
var res = []
var matrixLen = matrix.length
// 循环遍历第一行,列(j)会根据遍历过程逐步+1
// 行(i)在for循环中会逐步+1
// 会把该列的所有值push到tmp中,成为res的一行
// 然后继续下一列
matrix[0].forEach((el,j)=>{
var tmp = []
for(var i = 0; i<matrixLen; i++){
tmp.push(matrix[i][j])
}
res.push(tmp)
})
return res;
};
详情请见该题目的题解。