所有
我正在处理来自Leetcode的这个问题。
如果有人想查看问题,请点击以下链接:https://leetcode.com/problems/valid-sudoku/
我认为我几乎解决了这个问题,但是" java.lang.ArrayIndexOutOfBoundsException"我在我的代码中使用大写注释来标记出来,==> " if(brain [((int)board [x] [y]) - 1])"
我多次检查过,我认为索引应该在0~8之间完全正常,因为#int;对于(int i = 0,i< 9; i ++)"我找不到原因。
我想这一定是一个容易愚蠢的问题,但我有点花很多时间才能找到它。有人可以帮助我吗?
非常感谢任何帮助!
public class Solution {
public boolean isValidSudoku(char[][] board) {
if (board.length > 9 || board[0].length > 9 || board == null) {
return false;
}
boolean[] brain;
// 9 digits are corresponding to 1 ~ 9 ==> 0 - 1, 1 - 2 ... 8 - 9
// ex: brain[2] is checking for digit "3" , so using brain[3-1] to check "3"
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[x][y] != '.') {
// THE NEXT LINE IS THE PROBLEM!!!
if (brain[((int) board[x][y]) - 1]) {
// my condition failed by using:
// brain[board[x][y] - 1]
// other's condition Partially passed by using
// (still failed for final submission:
// brain[(int) (board[x][y] - '1')]
// need to compare the difference
return false;
} else {
brain[((int) board[x][y]) - 1] = true;
}
}
}
}
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[x][y] != '.') {
if (brain[((int) board[y][x]) - 1]) {
return false;
} else {
brain[((int) 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] != '.') {
if (brain[((int) board[r][c]) - 1]) {
return false;
} else {
brain[((int) board[r][c]) - 1] = true;
}
}
}
}
}
return true;
}
}
答案 0 :(得分:0)
您正在尝试将char
转换为int
。尝试手动转换这些值,您会注意到0=48
和9=57
,我猜这应该是您的异常的原因。
您可能想要检查其中的值是否代表数字,并使用char
方法获取Character#getNumericValue
的数值。
if (Character.isDigit(board[x][y]) &&
brain[Character.getNumericValue(board[x][y])) - 1]) {
...
}