# 转置矩阵(867)

# 题目

给定一个矩阵 A, 返回 A 的转置矩阵。

# 示例

输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]]

输入:[[1,2,3],[4,5,6]] 输出:[[1,4],[2,5],[3,6]]

# 算法

# 双循环一

当给B[0][0]第一次赋值时,需要将B[0]设为[]

function transpose(A) {
  let B = []
  for(let i = 0; i < A.length; i++) {
    for(let j = 0; j < A[i].length; j++) {
      if (!B[j]) B[j] = []
      B[j][i] = A[i][j]
    }
  }
  return B
}
1
2
3
4
5
6
7
8
9
10

# 双循环二

初始化一个j*i的空数组,需要注意不能使用new Array(A[0].length).fill(new Array(A.length))初始化B,这样数组B的第一维的数组都是同一个引用,当B[0][0] = 1时,B[1][0] === 1

function transpose(A) {
  let B = new Array(A[0].length).fill(0).map(item=>[])
  for(let i = 0; i < A.length; i++) {
    for(let j = 0; j < A[i].length; j++) {
      B[j].push(A[i][j])
    }
  }
  return B
}
1
2
3
4
5
6
7
8
9