思路:挨个判断当前要填入的数据是否合适,合适就填入 class Solution { public void solveSudoku(char[][] board) { write(board); } public boolean write(char [][] board){ for (int i=0;i<9;i++){ for (int j=0;j<9;j++){ if (board[i][j]!='.'){ continue; } for (char k='1';k<='9';k++){ if (!checkLHB(i,j,board,k)){ continue;//检查要填入的数字是否合适,不合适跳出本次循环 } board[i][j]=k;//合适就填入 if (write(board)){//回溯 return true; }//如果出现不合适的数据就会返回false,此时board[i][j]=. board[i][j]='.'; } return false; } } return true; } public boolean checkLHB(int i,int j,char[][] board,char curchar){ for (int m=0;m<9;m++){//检查当前列 if (board[i][m]==curchar){ return false; } } for (int n=0;n<9;n++){//检查当前行 if (board[n][j]==curchar){ return false; } }//检查当前九宫格 int x=(i/3)*3; int y=(j/3)*3; for (int m=x;m<x+3;m++){ for (int n=y;n<y+3;n++){ if (board[m][n]==curchar){ return false; } } } return true; } }