博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法系列1--js转置矩阵
阅读量:327 次
发布时间:2019-03-03

本文共 1306 字,大约阅读时间需要 4 分钟。

给定一个矩阵 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]]

见图思路分析:此处省略1000字,

重点MARK:1.输出的数组长度是输入的数组项的长度 2.输出数组的第一项是输入的每个数组的第一项的数组集合,

代码实战:

function ArrayTest (arr) {  var resArr = [];  var len = arr.length;  var col = arr[0].length;  for (var i = 0; i < len; i++) {    var temp = [];    for (var j = 0; j < arr[i].length; j++) {      temp.push(arr[j][i])    }    resArr[i] = temp;  }  return resArr;}console.log(ArrayTest([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))//[ [ 1, 4, 7 ], [ 2, 5, 8 ], [ 3, 6, 9 ] ]

 上面的方法解决了问题,实现我们的目标,但是只适用于数组的长度与每项的长度相等的情况下

console.log(ArrayTest([[1, 2, 3], [4, 5, 6]]))//temp.push(arr[j][i])                      //TypeError: Cannot read property '0' of undefined

针对第二种情况,我们可以另外的进行算法

var testArray2 = function (A) {  const rows = A.length;  const cols = A[0].length;  const result = new Array(cols).fill(new Array(rows).fill());  for (let i = 0; i < cols; i++) {    result[i] = [];    for (let j = 0; j < rows; j++) {      result[i][j] = A[j][i];    }  }  return result;};console.log(ArrayTest([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))console.log(testArray2([[1, 2, 3], [4, 5, 6]]))[ [ 1, 4, 7 ], [ 2, 5, 8 ], [ 3, 6, 9 ] ][ [ 1, 4, 7 ], [ 2, 5, 8 ], [ 3, 6, 9 ] ][ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]

 

 

转载地址:http://apyq.baihongyu.com/

你可能感兴趣的文章