• 37. Sudoku Solver(js)


    37. Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells.

    A sudoku solution must satisfy all of the following rules:

    1. Each of the digits 1-9 must occur exactly once in each row.
    2. Each of the digits 1-9 must occur exactly once in each column.
    3. Each of the the digits 1-9 must occur exactly once in each of the 9 3x3sub-boxes of the grid.

    Empty cells are indicated by the character '.'.


    A sudoku puzzle...

    题意:填满剩余数字,使其满足数独

    代码如下:

    /**
     * @param {character[][]} board
     * @return {void} Do not return anything, modify board in-place instead.
     */
    var solveSudoku = function(board) {
        if(board.length===0 || board.length!==9 || board[0].length!==9) return ;
        dfs(board,0,0);
    };
    // 判断是否符合要求
    /**
    *1.每一行值各不相同
    *2.每一列值各不相同
    *3.每个3X3的小棋盘里的值各不相同
    */
    var isValid=function(board,i,j){
        for(let col=0;col<9;col++){
            if(col!==j && board[i][j]===board[i][col]) return false;
        }
        for(let row=0;row<9;row++){
            if(row!==i && board[i][j]===board[row][j]) return false;
        }
        for(let row=parseInt(i/3)*3;row<parseInt(i/3)*3+3;row++){
            for(let col=parseInt(j/3)*3;col<parseInt(j/3)*3+3;col++){
                if((row!==i || col!==j)&&board[i][j]===board[row][col]) return false;
            }
        }
        return true;
    };
    /**
    *递归遍历,边界判断,逐个数字带入值为'.'的方格,判断其是否符合要求
    */
    var  dfs=function(board,i,j){
        if(i===9) return true;
        if(j>=9) return dfs(board,i+1,0);
        if(board[i][j]==='.'){
            for(let k=1;k<=9;k++){
                board[i][j]=k+'';
                if(isValid(board,i,j)){
                    if(dfs(board,i,j+1)) return true;
                }
                board[i][j]='.';
            }
        }else{
            return dfs(board,i,j+1);
        }
        return false;
    };
  • 相关阅读:
    MySQL 通过多个示例学习索引
    git reset的用法
    git rebase的用法
    学习yii2.0——依赖注入
    学习yii2.0——行为
    学习yii2.0——事件
    学习yii2.0——数据验证
    让Apache和Nginx支持php-fpm模块
    安装python3
    使用php操作memcache
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/10415253.html
Copyright © 2020-2023  润新知