首页 > 代码库 > [LeetCode]37 Sudoku Solver
[LeetCode]37 Sudoku Solver
https://oj.leetcode.com/problems/sudoku-solver/
http://blog.csdn.net/linhuanmars/article/details/20748761
public class Solution { public void solveSudoku(char[][] board) { resolve(board, 0, 0); } private boolean resolve(char[][] b, // current board int i, // current row int j) // current col { // Goes to next row if (j == 9) return resolve(b, i + 1, 0); // No further to try if (i == 9) return true; // A pre-defined, goes to next if (b[i][j] != ‘.‘) return resolve(b, i , j + 1); // possible numbers for (char k = ‘1‘ ; k <= ‘9‘ ; k ++) { b[i][j] = k; if (checkRow(b, i) && checkCol(b, j) && checkBlk(b, i, j)) { if (resolve(b, i, j + 1)) return true; // else this assignment is not good for following iterations. } b[i][j] = ‘.‘; } return false; } // Check row in b in valid private boolean checkRow(char[][] b, int row) { boolean[] c = new boolean[9]; for (int i = 0 ; i < 9 ; i ++) { if (b[row][i] != ‘.‘) { int v = b[row][i] - ‘1‘; if (c[v]) return false; else c[v] = true; } } return true; } // Check column in b in valid private boolean checkCol(char[][] b, int col) { boolean[] c = new boolean[9]; for (int i = 0 ; i < 9 ; i ++) { if (b[i][col] != ‘.‘) { int v = b[i][col] - ‘1‘; if (c[v]) return false; else c[v] = true; } } return true; } // Check block in b is valid private boolean checkBlk(char[][] b, int row, int col) { int rstart = (row / 3) * 3; int cstart = (col / 3) * 3; boolean[] c = new boolean[9]; for (int i = 0 ; i < 3 ; i ++) { for (int j = 0 ; j < 3 ; j ++) { if (b[i + rstart][j + cstart] != ‘.‘) { int v = b[i + rstart][j + cstart] - ‘1‘; if (c[v]) return false; else c[v] = true; } } } return true; } }
[LeetCode]37 Sudoku Solver
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。