37. Sudoku Solver

Posted xingguozhiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了37. Sudoku Solver相关的知识,希望对你有一定的参考价值。

       最近比较烦,被领导拉去谈话说年后是不是就要跳槽走,凭着我这直男的性子,脱口而出“是的,除非涨薪比较明显”。说完就后悔了,今年吧在这家公司吧也没啥成绩就急着走人,以后的日子贼尴尬。我吧一直对算法比较感兴趣,可是脑子就是转不快,就有时候后端说的东西都有点不明白,一直被同层级的后端牵着走。说实话自己是个失败的前端,沟通能力又极为欠缺,实在找不到什么优点,除了对vue和原生js相对更懂一些,其他的都不太懂。虽然懂得东西少的可怜,但是我知道只要把算法能力提升一个高度,一切都会不一样的,坚持刷leetcode。

      数独:1.9X9棋盘格

    2.每一行填入1-9不重复,每一列一样

              3.9X9的棋盘格又可细分为9个3X3的小棋盘格,每个3X3的小棋盘格填入1-9,并且小棋盘格里的数字也不能重复

    说来惭愧,这道题和之前做过的n皇后问题属于一个问题,动态规划,只不过现在又忘了怎么做了,正好今天复习一下

    动态规划:按我的理解动态规划就是递归,只不过每一次递归都把所有的可能结果保存起来,当递归完成也就取到了所有可能的结果,可以用来解决最优解的问题,如背包问题。

    解题思路:1.遍历:递归遍历这个二维数组(棋盘格)

      2.带入可选值:如果当前值为数值则跳过,若为"."则逐步带入1-9并判断其合法性

      3.是否符合要求:检测带入的值是否符合要求

思路简单,但要原原本本写出代码通过测试还是需要一定功底的。代码如下:

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;
};

 

以上是关于37. Sudoku Solver的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 37 Sudoku Solver(求解数独)

37. Sudoku Solver

37. Sudoku Solver(js)

java 37. Sudoku Solver(#)。java

java 37. Sudoku Solver(#)。java

java 37. Sudoku Solver(#)。java