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

将Python实现的isSubMatrixFull函数转换为等效JavaScript代码

3x3子矩阵元素全不重复校验功能JS实现修正

完全对齐Python原版实现逻辑,实现3行输入矩阵的所有连续3列组成的3x3子矩阵是否元素全唯一的校验

原始Python参考代码

def getCol(mat, col):
    return [mat[i][col] for i in range(3)]

def isSubMatrixFull(mat):
    n = len(mat[0])
    ans = [False]*(n-2)
    kernel = getCol(mat, 0) + getCol(mat, 1) + getCol(mat, 2) # O(1)
    for i in range(n - 2): # O(n)
        if len(set(kernel)) == 9: # O(1)
            ans[i] = True # O(1)
        if i < n - 3: # O(1)
            kernel = kernel[3:] + getCol(mat, i + 3) # O(1)
    return ans

nums = [[1, 2, 3, 2, 5, 7], [4, 5, 6, 1, 7, 6], [7, 8, 9, 4, 8, 3]]
print(isSubMatrixFull(nums)) 

现有JS代码问题梳理

你实现时的核心错误点如下:

  • getCol函数没有设计返回值,且错误将列元素以嵌套数组的形式推入全局test数组,导致每次调用都会累积冗余数据,无法拿到纯净的指定列元素
  • JS中数组不能直接用+拼接,会触发隐式类型转换为字符串,你代码中main变量后续会变成字符串而非元素数组,Set判断完全失效
  • 初始滑动窗口(Python中的kernel,你代码中的main)的构造逻辑错误,没有按列拼接前三列的所有元素,偏离Python原版逻辑

修正后完全对齐Python逻辑的JS代码

// 对应Python的getCol函数:返回指定列的3个元素组成的数组
function getCol(mat, col) {
  return [mat[0][col], mat[1][col], mat[2][col]]
}

function isSubMatrixFull(mat) {
  const n = mat[0].length
  const ans = new Array(n - 2).fill(false)
  // 初始化滑动窗口:拼接前三列的所有元素
  let kernel = [...getCol(mat, 0), ...getCol(mat, 1), ...getCol(mat, 2)]
  for (let i = 0; i < n - 2; i++) {
    // 判断当前窗口9个元素是否全唯一
    if (new Set(kernel).size === 9) {
      ans[i] = true
    }
    if (i < n - 3) {
      // 窗口滑动:去掉最左列3个元素,加入新的最右列3个元素
      kernel = [...kernel.slice(3), ...getCol(mat, i + 3)]
    }
  }
  return ans
}

// 测试用例
const nums = [[1, 2, 3, 2, 5, 7], [4, 5, 6, 1, 7, 6], [7, 8, 9, 4, 8, 3]]
console.log(isSubMatrixFull(nums))

输出验证

上述测试用例运行输出为 [true, false, true, false],和预期结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:24:05