【问题标题】:Javascript Diagonal MatrixJavascript 对角矩阵
【发布时间】:2017-03-08 19:36:31
【问题描述】:

我需要在JS中做一个简单的对角矩阵,应该是这样的:

[
  [4, 7, 9],
  [2, 5, 8],
  [1, 3, 6]
]

我的想法是使用二维数组和两个循环,但我得到的结果是一个空数组。您将在下面看到我的代码的样子,但显然我的值有问题。

function fillMatrix(n) {
  var matrix = [];
  var rows = 0;
  var cols = 0;
  var startCount = 1;

  for (var i = (n - 1); i >= 0; i--) {
    rows = i;
    cols = 0;
    matrix[rows] = [];
    while (rows < n && cols < n) {

      matrix[rows++][cols++] = startCount++;
    }


    for (var j = 0; j < n; j++) {
      rows = j;
      cols = 0;
      matrix[rows] = [];
      while (rows < n && cols < n) {
        matrix[cols++][cols++] = startCount++;
      }
    }
  }
  return matrix;
}

n = +prompt();
console.log(fillMatrix(n));

【问题讨论】:

  • 我不确定什么是“对角矩阵”或者你的代码试图做什么。您能否就它的工作原理以及一些示例输入/预期输出添加一些解释?
  • 你好,这就是我所说的“对角矩阵”link。这个想法是输入行数/列数(n)并在控制台中按以下顺序打印一个数组:[4,7,9] [2,5,8] [1,3,6];

标签: javascript matrix multidimensional-array


【解决方案1】:

如果查看行之间的模式,则可以大大简化创建对角矩阵的逻辑。 (我不会在这里介绍所有的数学知识,但请随时在 cmets 中向我提问有关您感到困惑的任何特定部分的问题。)

以 4x4 对角矩阵为例:

一行中的元素之间的连续差异形成以下模式:

我可能仍在努力缩短下面的方法,但现在它可以工作并且相当简洁。

演示:

function diagonalMatrix (n) {
  var matrix = [], row
  for (var i = n; i > 0; i--) {
    var x = i*(i-1)/2 + 1, dx = i
    matrix.push(row = [])
    for (var j = n; j > 0; j--) {
      row.push(x)
      x += (i < j ? ++dx : dx--)
    }
  }
  return matrix
}

var matrix = diagonalMatrix(+prompt('Diagonal Matrix Order:'))

console.log(beautify(matrix))
console.log(matrix)



// For visualization purposes
function beautify (matrix) {
  return matrix.map(function (e) {
    return e.join('\t')
  }).join('\n\n\n\n')
}
.as-console-wrapper { min-height: 100vh; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多