当前位置: 首页 > article >正文

解数独力扣

题目

解题思路

1.双层循环每一个位置都要去判断能不能放数字

2.每到一个位置如果为空,for循环遍历1-9,通过函数判断是否能放这个数字能放开始回溯判断放下这个数字之后

3.不设结束条件,一直循环判断下去知道所有位置全部填满数字然后return true表示找到解

func solveSudoku(board [][]byte) {
    var backtracking func(board [][]byte) bool
    backtracking = func(board [][]byte) bool {
        for i := 0; i < 9; i++ {
            for j := 0; j < 9; j++ {
                //判断此位置是否适合填数字
                if board[i][j] != '.' {
                    continue
                }
                //尝试填1-9
                for k := '1'; k <= '9'; k++ {
                    if isvalid(i, j, byte(k), board) == true { //如果满足要求就填
                        board[i][j] = byte(k)
                        if backtracking(board) == true {
                            return true
                        }
                        board[i][j] = '.'
                    }
                }
                return false
            }
        }
        return true
    }
    backtracking(board)
}

//判断填入数字是否满足要求
func isvalid(row, col int, k byte, board [][]byte) bool {
    for i := 0; i < 9; i++ { //行
        if board[row][i] == k {
            return false
        }
    }
    for i := 0; i < 9; i++ { //列
        if board[i][col] == k {
            return false
        }
    }
    //方格
    startrow := (row / 3) * 3
    startcol := (col / 3) * 3
    for i := startrow; i < startrow+3; i++ {
        for j := startcol; j < startcol+3; j++ {
            if board[i][j] == k {
                return false
            }
        }
    }
    return true
}


http://www.kler.cn/a/518982.html

相关文章:

  • Linux的权限和一些shell原理
  • 【Linux】IPC:匿名管道、命名管道、共享内存
  • 想品客老师的第七天:闭包和作用域
  • Redis实战(黑马点评)——涉及session、redis存储验证码,双拦截器处理请求
  • 区块链共识机制详解
  • 日志收集Day005
  • MATLAB 工具库的使用说明和案例示例
  • 双写+灰度发布:高并发场景下的维度表拆分零事故迁移实践
  • Mono里运行C#脚本36—加载C#类定义的成员变量和方法的数量
  • 【数据结构】树的基本:结点、度、高度与计算
  • vue路由history模式springBoot/Nginx配置
  • 【优选算法】11----最大连续1的个数|||
  • 【湖北省乡镇界】面图层arcgis数据乡镇名称和编码wgs84坐标无偏移shp格式内容测评
  • debian12.9编译freeswitch1.10.12【默认安装】
  • 掌握Gradle构建脚本:Kotlin DSL配置指南与最佳实践
  • 机器学习day3
  • 本地Ubuntu轻松部署高效性能监控平台SigNoz与远程使用教程
  • 71.在 Vue 3 中使用 OpenLayers 实现按住 Shift 拖拽、旋转和缩放效果
  • Linux MySQL离线安装
  • 《深入解析:DOS检测的技术原理与方法》
  • 9.business english-agreement
  • WPS添加文本超简单,批量操作不费劲-Excel易用宝
  • 基于Flask框架和Hive数仓的农业数据分析系统
  • 【论文阅读】RT-SKETCH: GOAL-CONDITIONED IMITATION LEARNING FROM HAND-DRAWN SKETCHES
  • 设计模式的艺术-中介者模式
  • 深度学习 Pytorch 单层神经网络