C/C++教程

leetcode 37 数独

本文主要是介绍leetcode 37 数独,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

private boolean[][] r = new boolean[9][9];
    private boolean[][] c = new boolean[9][9];
    private boolean[][][] x = new boolean[3][3][9];
    private boolean valid = false;
    private List<int[]> list = new ArrayList<int[]>();

public void solveSudoku(char[][] board) {
        for(int i = 0; i < 9; i++) {
            for(int j = 0; j < 9; j++) {
                if(board[i][j] == '.') {
                    list.add(new int[] {i,j});
                }
                else {
                    int num = Integer.parseInt(String.valueOf(board[i][j])) - 1;
                    r[i][num] = c[j][num] = x[i/3][j/3][num] = true;
                }
            }
        }
        dfs(board, 0);
    }
    private void dfs(char[][] board, int pos) {
        if(pos == list.size()) {
            valid = true;
            return;
        }
        int[] thisPos = list.get(pos);
        int m = thisPos[0], n = thisPos[1];
        for(int i = 0; i < 9 && !valid; i++) {
            if(!r[m][i] && !c[n][i] && !x[m/3][n/3][i]) {
                r[m][i] = c[n][i] = x[m/3][n/3][i] = true;
                board[m][n] = (char) (i + '0' + 1);
                dfs(board, pos+1);
                r[m][i] = c[n][i] = x[m/3][n/3][i] = false;
            }
        }
    }

这篇关于leetcode 37 数独的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!