zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

2023-03-14 22:59:39 时间

题目描述

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

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

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

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

解题代码

image

只会暴力解法

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
}

提交结果

image