[LeetCode]37. Sudoku Solver

来源:互联网 发布:淘宝卖面膜怎么样 编辑:程序博客网 时间:2024/05/22 02:19

https://leetcode.com/problems/sudoku-solver/

递归+回溯,遍历到当前位置时判断是否valid,如果valid就将改过之后的board继续递归。


另外判断是否小正方形里面valid比较trick,学习下。这里面trick之处在于要对i和j都除三再乘三,以便于定位到9个正方形中[i, j]所在的那个





public class Solution {    public void solveSudoku(char[][] board) {        if (board == null || board.length == 0) {            return;        }        solve(board);    }    private boolean solve(char[][] board) {        for (int i = 0; i < 9; i++) {            for (int j = 0; j < 9; j++) {                if (board[i][j] == '.') {                    for (char c = '1'; c <= '9'; c++) {                        if (valid(board, i, j, c)) {                            board[i][j] = c;                            if (solve(board)) {                                return true;                            } else {                                board[i][j] = '.';                            }                        }                    }                    return false;                }            }        }        return true;    }    private boolean valid(char[][] board, int row, int col, char c) {        for (int i = 0; i < 9;i ++) {            if (board[row][i] == c) {                return false;            }            if (board[i][col] == c) {                return false;            }            if (board[3 * (row / 3) + (i / 3)][3 * (col / 3) + (i % 3)] == c) {                return false;            }        }        return true;    }}


0 0
原创粉丝点击