You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断输入矩阵是否为对称矩阵?现有JS校验代码运行出错求解决

对称矩阵校验函数修复方案

问题原因

  1. 现有函数仅实现了矩阵转置逻辑,没有完成对称性校验的步骤,最终仅返回了转置后的矩阵
  2. 若你之前将元素对比的if判断写在了转置的嵌套循环内,此时转置矩阵array还没有完全生成,array[j][i]可能还未赋值,自然会得到错误结果
  3. 对称矩阵的前置校验缺失:没有先判断输入矩阵是否为方阵(行数等于列数),非方阵不可能是对称矩阵

修复后代码

const symmetricMatrix = function (MAT) {
  // 第一步:校验是否为方阵
  const n = MAT.length;
  for (const row of MAT) {
    if (row.length !== n) return false;
  }

  // 生成转置矩阵,逻辑保持不变
  const array = [];
  for (let i = 0; i < n; i++) {
    array.push([]);
    for (let j = 0; j < n; j++) {
      array[i].push(MAT[j][i]);
    }
  }

  // 第二步:逐元素对比原矩阵和转置矩阵的对应位置
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      // 对比的是原矩阵[i][j]和转置矩阵[i][j],索引不要写错
      if (MAT[i][j] !== array[i][j]) {
        return false;
      }
    }
  }

  // 所有校验通过才是对称矩阵
  return true;
};

// 测试示例
console.log(
  symmetricMatrix([
    [1, 3, 1],
    [-1, 1, 4],
    [2, 1, 0],
  ])
); 
// 输出:false,符合预期

优化方案

无需额外生成转置矩阵,直接对比矩阵对称位置的元素即可,空间复杂度可从O(n²)降至O(1),还可以只遍历上三角区域减少一半运算量:

const symmetricMatrix = function (MAT) {
  const n = MAT.length;
  // 校验方阵
  for (const row of MAT) {
    if (row.length !== n) return false;
  }
  // 仅遍历上三角区域,对比对称位置元素
  for (let i = 0; i < n; i++) {
    for (let j = i + 1; j < n; j++) {
      if (MAT[i][j] !== MAT[j][i]) {
        return false;
      }
    }
  }
  return true;
};

内容的提问来源于stack exchange,提问作者john smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:06:03