这个题目,看着略微头大,但是应该还是不难
1.对于一个for循环九次循环,判断数组里面是否有该元素
2.一个for循环九次看数组中board[i][0]
是否有该元素的重复
3.这个就需要先框定一个界限起始点的行+3,列+3的范围,然后遍历9个看是否有重复元素
那么这样的话遍历一个格子时间复杂度大概在(9+9+9)*81
实际上最大的程度如果是这个样子的话可以接受,不太考虑算法,只关注与具体实现
class Solution {
public boolean isValidSudoku(char[][] board) {
for(int i=0;i<9;i++)
{
for (int j = 0; j < board.length; j++) {
if (board[i][j] == '.')
continue;
//第一个条件列变
for (int j1 = 0; j1 < board.length; j1++) {
if (board[i][j] == board[i][j1] && j != j1)
return false;
}
//第二个条件行变
for (int j2 = 0; j2 < board.length; j2++) {
if (board[i][j] == board[j2][j] && i != j2)
return false;
}
//第三个条件九宫格
//首先得判断当前具体处于哪个九宫格
int hang = i / 3, lie = j / 3;
//0 1 2第一个九宫格 3 4 5 第二个 6 7 8 第三个
for (int k = hang * 3; k < hang * 3 + 3; k++) {
for (int k1 = lie * 3; k1 < lie * 3 + 3; k1++) {
if (board[i][j] == board[k][k1] && (i != k && j != k1))
return false;
}
}
}
}
//如果以上条件都满足返回true
return true;
}
}
哇当思路清晰,把步骤去给拆分后,所有这些问题都开始瓦解了,一遍过