Valid Sudoku

来源:互联网 发布:红米清空用户数据99 编辑:程序博客网 时间:2024/04/28 01:10
主要分为三步:行检测,列检测,以及小区域检测
/** * Created by jason on 13-12-16. */public class ValidSudoku {    public boolean isValidSudoku(char[][] board) {        return isvalidRow(board) && isvalidColumn(board) && isvalidRegieon(board);    }    public boolean isvalidRow(char[][] board) {        int[] count = new int[9];        for (int i = 0; i < board.length; i++) {            memset(count, 0);            for (int j = 0; j < board[0].length; j++) {                if (!add(board[i][j], count))                    return false;            }        }        return true;    }    public boolean isvalidColumn(char[][] board) {        int[] count = new int[9];        for (int i = 0; i < board.length; i++) {            memset(count, 0);            for (int j = 0; j < board[0].length; j++) {                if (!add(board[j][i], count))                    return false;            }        }        return true;    }    public boolean isvalidRegieon(char[][] board) {        int increment = (int) Math.sqrt(board.length);        int[] count = new int[9];        for (int k = 0; k < board.length; k++) {            memset(count, 0);            int ii = k / 3 * 3;            int jj = k % 3 * 3;            for (int i = ii; i < ii + increment; i++) {                for (int j = jj; j < jj + increment; j++) {                    if (!add(board[i][j], count))                        return false;                }            }        }        return true;    }    public boolean add(char c, int[] count) {        if (c == '.') return true;        else return ++count[c - '1'] <= 1;    }    public void memset(int[] count, int v) {        for (int i = 0; i < count.length; i++) {            count[i] = v;        }    }}

0 0
原创粉丝点击