每日一题---36. 有效的数独[力扣][Go]

简介: 每日一题---36. 有效的数独[力扣][Go]

题目描述

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。

数字 1-9 在每一列只能出现一次。

数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

解题代码

只会暴力解法

func isValidSudoku(board [][]byte) bool {
  // 确定1~9是否只出现一次
  var b = make([]bool,9)
  for _, bytes := range board {
    for i2, b2 := range bytes {
      if b2 != byte('.') {
        atoi, _ := strconv.Atoi(string(b2))
        if !b[atoi-1] {
          b[atoi-1] = true
        } else {
          return false
        }
      }
      if i2 == 8 {
        b = make([]bool,9)
      }
    }
  }
  // 列
  for i := 0; i < 9; i++ {
    for j := 0; j < 9; j++ {
      if board[j][i] != byte('.') {
        atoi, _ := strconv.Atoi(string(board[j][i]))
        if !b[atoi - 1] {
          b[atoi - 1] = true
        } else {
          return false
        }
      }
      if j == 8 {
        b = make([]bool,9)
      }
    }
  }
  // 3*3 单元格
  x := 0
  y := 0
  for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
      if board[i + x*3][j + y*3] != byte('.') {
        atoi, _ := strconv.Atoi(string(board[i + x*3][j + y*3]))
        fmt.Println(atoi)
        if !b[atoi - 1] {
          b[atoi - 1] = true
        } else {
          return false
        }
      }
      if i + 3*j == 8 {
        b = make([]bool,9)
      }
    }
    if i == 2 {
      y ++
      i = -1
    }
    if y == 3 {
      y = 0
      x ++
    }
    if x == 3 {
      break
    }
  }
  return true
}

提交结果


相关文章
|
6月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
59 6
|
6月前
|
Go C++
【力扣】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
【2月更文挑战第17天】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
44 8
每日一题 --- 942. 增减字符串匹配[力扣][Go]
每日一题 --- 942. 增减字符串匹配[力扣][Go]
每日一题 --- 942. 增减字符串匹配[力扣][Go]
|
算法 Go
每日一题 --- 442. 数组中重复的数据[力扣][Go]
每日一题 --- 442. 数组中重复的数据[力扣][Go]
每日一题 --- 442. 数组中重复的数据[力扣][Go]
每日一题 --- 933. 最近的请求次数[力扣][Go]
每日一题 --- 933. 最近的请求次数[力扣][Go]
每日一题 --- 933. 最近的请求次数[力扣][Go]
每日一题 --- 713. 乘积小于 K 的子数组[力扣][Go]
每日一题 --- 713. 乘积小于 K 的子数组[力扣][Go]
每日一题 --- 713. 乘积小于 K 的子数组[力扣][Go]
每日一题 --- 606. 根据二叉树创建字符串[力扣][Go]
每日一题 --- 606. 根据二叉树创建字符串[力扣][Go]
每日一题 --- 606. 根据二叉树创建字符串[力扣][Go]
|
Go 索引
每日一题 ---- 599. 两个列表的最小索引总和[力扣][Go]
每日一题 ---- 599. 两个列表的最小索引总和[力扣][Go]
每日一题 ---- 599. 两个列表的最小索引总和[力扣][Go]
|
存储 测试技术 Go
每日一题 --- 393. UTF-8 编码验证[力扣][Go]
每日一题 --- 393. UTF-8 编码验证[力扣][Go]
每日一题 --- 393. UTF-8 编码验证[力扣][Go]
每日一题 --- 590. N 叉树的后序遍历[力扣][Go]
每日一题 --- 590. N 叉树的后序遍历[力扣][Go]
每日一题 --- 590. N 叉树的后序遍历[力扣][Go]