Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. public class Solution {
  2. public void solveSudoku(char[][] board) {
  3. if(board == null || board.length != 9 || board[0].length != 9) {
  4. return;
  5. }
  6. helper(board, 0, 0);
  7. }
  8.  
  9. // 从左至右,从上往下进行遍历递归
  10. private boolean helper(char[][] board, int i, int j) {
  11. if(j >= 9) {
  12. return helper(board, i+1, 0);
  13. }
  14. if(i == 9) {
  15. return true;
  16. }
  17. if(board[i][j] == '.') {
  18. for(int k=1; k<=9; k++) {
  19. board[i][j] = (char)(k + '0');
  20. if(isValid(board, i, j)) {
  21. if(helper(board, i, j+1)) { // 递归到下一格
  22. return true;
  23. }
  24. }
  25. board[i][j] = '.';
  26. }
  27. } else {
  28. return helper(board, i, j+1);
  29. }
  30. return false;
  31. }
  32.  
  33. private boolean isValid(char[][] board, int i, int j) {
  34. // 对行进行valid
  35. for(int k=0; k<9; k++) {
  36. if(board[i][k] != '.' && k!=j && board[i][k]==board[i][j]) {
  37. return false;
  38. }
  39. }
  40. // 对列进行valid
  41. for(int k=0; k<9; k++) {
  42. if(board[k][j] != '.' && k!=i && board[k][j]==board[i][j]) {
  43. return false;
  44. }
  45. }
  46. // 对每个九宫格进行valid
  47. for(int m=0; m<3; m++) {
  48. for(int n=0; n<3; n++) {
  49. int x=i/3*3+m;
  50. int y=j/3*3+n;
  51. if((x!=i || y!=j) && board[x][y]==board[i][j]) { // 注意判断条件
  52. return false;
  53. }
  54. }
  55. }
  56. return true;
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement