LeetCode

[LeetCode] 36. 有效的数独

2018-04-11  本文已影响0人  拉面小鱼丸

PS:开始偷懒了,直接上图

JAVA

class Solution {
    public boolean isValidSudoku(char[][] board) {
        HashSet[] sets = new HashSet[11];
        for (int i = 0; i < 11; i++) {
            sets[i] = new HashSet();
        }
        for (int i = 0; i < 9; i++) {
            sets[9].clear();
            sets[10].clear();
            for (int j = 0; j < 9; j++) {
                char c = board[i][j];
                if (c != '.') {
                    if (!sets[9].add(c)) {
                        return false;
                    }
                }
                char c2 = board[j][i];
                if (c2 != '.') {
                    if (!sets[10].add(c2)) {
                        return false;
                    }
                }
                if (c != '.') {
                    int i1 = i / 3;
                    int j1 = j / 3;
                    if (i1 == 0 && j1 == 0) {
                        if (!sets[0].add(c)) {
                            return false;
                        }
                    } else if (i1 == 0 && j1 == 1) {
                        if (!sets[1].add(c)) {
                            return false;
                        }
                    } else if (i1 == 0 && j1 == 2) {
                        if (!sets[2].add(c)) {
                            return false;
                        }
                    } else if (i1 == 1 && j1 == 0) {
                        if (!sets[3].add(c)) {
                            return false;
                        }
                    } else if (i1 == 1 && j1 == 1) {
                        if (!sets[4].add(c)) {
                            return false;
                        }
                    } else if (i1 == 1 && j1 == 2) {
                        if (!sets[5].add(c)) {
                            return false;
                        }  
                    } else if (i1 == 2 && j1 == 0) {
                        if (!sets[6].add(c)) {
                            return false;
                        }
                    } else if (i1 == 2 && j1 == 1) {
                        if (!sets[7].add(c)) {
                            return false;
                        }
                    } else if (i1 == 2 && j1 == 2) {
                        if (!sets[8].add(c)) {
                            return false;
                        }
                    }
                }
            }
        }
        return true;
    }
}

优化

class Solution {
    public boolean isValidSudoku(char[][] board) {
      boolean[][][] arrs = new boolean[3][9][9];
        // arrs[0][][] 记录行
        // arrs[1][][] 记录列
        // arrs[2][][] 记录宫格
        int v;
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (board[i][j] == '.') {
                    continue;
                }
               // char c = board[i][j];
               // int v = Integer.parseInt("" + c) -1;
                v = board[i][j] - '1';
                if (arrs[0][i][v] || arrs[1][j][v] || arrs[2][i / 3 * 3 + j / 3][v]) {
                    return false;
                } else {
                    arrs[0][i][v] = true;
                    arrs[1][j][v] = true;
                    arrs[2][i / 3 * 3 + j / 3][v] = true;
                }
            }
        }
        return true;
    }
}
上一篇下一篇

猜你喜欢

热点阅读