DFS 时间复杂度较大,待优化

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.LinkedList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static int[][] borad = new int[9][9];
    public static List<int[]> list = new ArrayList<>();
    public static Queue<int[]> queue = new LinkedList<>();
    public static List<int[][]> resultList = new ArrayList<>();
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            for (int i = 0; i < 9; i++) {
                for (int j = 0; j < 9; j++) {
                    int value = in.nextInt();
                    if (value == 0) list.add(new int[]{i, j});
                    borad[i][j] = value;
                }
            }
        }
        Sudoku(0);
        int[][] rell = resultList.get(0);
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (j == 8) {
                    System.out.println(rell[i][j]);
                } else {
                    System.out.print(rell[i][j] + " ");
                }
            }
        }
    }
    public static void Sudoku(int index) {
       if (index == list.size()) {
           int[][] result = new int[9][9];
           for (int i = 0; i < 9; i++) {
               for (int j = 0; j < 9; j++) {
                   result[i][j] = borad[i][j];
               }
           }
           resultList.add(result);
           return;
       }
        int[] post = list.get(index);
        int cow = post[0];
        int row = post[1];
       for (int i = 1; i < 10; i++) {
           if (isOk(post, i)) {
               borad[cow][row] = i;
               Sudoku(index + 1);
           }
           borad[cow][row] = 0;
       }
    }
    public static boolean isOk(int[] post, int q) {
        int cow = post[0];
        int row = post[1];
            //遍历行
            for (int j = 0; j < 9; j++) {
                if (borad[cow][j] == q) return false;
            }
            // 遍历列
            for (int j = 0; j < 9; j++) {
                 if (borad[j][row] == q) return false;
            }
            // 遍历3 X 3 表格
            for (int j = (cow / 3) * 3; j < (cow / 3) * 3 + 3; j++) {
                for (int k = (row / 3) * 3; k <  (row / 3) * 3 + 3; k++) {
                    if (borad[j][k] == q) return false;
                }
            }
        return true;
    }
}