在Char []中过滤句点

时间:2016-03-09 16:37:26

标签: java indexoutofboundsexception

Leetcode上的有效数独问题已经解决了,然而,关于'。'仍有一些问题,在我尝试其他方式之前我无法过滤。

查看有关(1)&的评论部分。 (2),(1)=使用continue过滤周期的正确方法;如果'。'找到了。 (2)=是我之前使用的错误方法,它只允许数字传递给以下if语句。

假设1~9位数字和'。'将是唯一的输入。

我只需要有人帮助我分析这两种方式之间的区别,这样我就可以从错误中吸取教训。

感谢您的帮助!

public class Solution {
    public boolean isValidSudoku(char[][] board) {
        if (board.length > 9 || board[0].length > 9 || board == null) {
            return false;
        }

        boolean[] brain;
        for (int x = 0; x < board.length; x++) {
            // Reset brain
            brain = new boolean[9];
            for (int y = 0; y < board[0].length; y++) {

                // ------- (1) Begin -------
                if (board[x][y] == '.') {
                    continue;
                }
                if (brain[board[x][y] - '1']) {
                    return false;
                } else {
                    brain[board[x][y] - '1'] = true;
                }
                // ------- (1) End -------

                // statments (1) above is the correct one, I used to use code below:
                /*
                // ------- (2) Begin -------
                if (board[x][y] != '.') {
                    if (brain[board[x][y] - '1']) {
                        return false;
                    } else {
                        brain[board[x][y] - '1'] = true;
                    }
                }
                // ------- (2) Begin -------
                */
                // which failed for not filter out '.' properly
                // so I changed to filter '.' out by using continue;
            }
        }

        for (int x = 0; x < board.length; x++) {
            // Reset brain
            brain = new boolean[9];
            for (int y = 0; y < board[0].length; y++) {
                if (board[y][x] == '.') {
                    continue;
                }
                if (brain[board[y][x] - '1']) {
                    return false;
                } else {
                    brain[board[y][x] - '1'] = true;
                }
            }
        }

        for (int block = 0; block < 9; block++) {
            // Reset brain
            brain = new boolean[9];
            for (int r = block / 3 * 3; r < block / 3 * 3 + 3; r++) {
                for (int c = block % 3 * 3; c < block % 3 * 3 + 3; c++) {
                    if (board[r][c] == '.') {
                        continue;
                    }
                    if (brain[board[r][c] - '1']) {
                        return false;
                    } else {
                        brain[board[r][c] - '1'] = true;
                    }
                }
            }
        }
        return true;
    }
}

0 个答案:

没有答案