检查是否每一行每一列都包含全部整数

336 阅读1分钟

5976. 检查是否每一行每一列都包含全部整数

题目

对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵。

给你一个大小为 n x n 的整数矩阵 matrix ,请你判断矩阵是否为一个有效矩阵:如果是,返回 true ;否则,返回 false 。

示例1

image.png

输入:matrix = [[1,2,3],[3,1,2],[2,3,1]]
输出:true
解释:在此例中,n = 3 ,每一行和每一列都包含数字 123 。
因此,返回 true

题解

暴力

  • 枚举二维数据
  • 对二维数组每行数组排序,得到的必然是[1,n]组成的整数,如果不是,返回false
  • 如何快速判断数组是否是[1,n]组成的?
  • 将数组转成字符串,先生成[1,n]的数组,将排序后的数组转成字符串与[1,n]组成的数组转为字符串比较,不同返回false
  • 最后返回true

代码

var checkValid = function (matrix) {
  const m = matrix.length
  const n = matrix[0].length
  const list = Array(n)
    .fill(0)
    .map((v, i) => i + 1)
  const s = list.join(',')
  if (m !== n) return false
  for (let i = 0; i < m; i++) {
    let temp = []
    for (let j = 0; j < n; j++) {
      temp.push(matrix[i][j])
    }
    temp.sort((a, b) => a - b)
    if (temp.join(',') !== s) return false
  }
  for (let i = 0; i < n; i++) {
    let temp = []
    for (let j = 0; j < m; j++) {
      temp.push(matrix[j][i])
    }
    temp.sort((a, b) => a - b)
    if (temp.join(',') !== s) return false
  }

  return true
}