LC 有效的数独
Posted yangbocsu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC 有效的数独相关的知识,希望对你有一定的参考价值。
LC 有效的数独
请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
数独部分空格内已填入了数字,空白格用 ‘.’ 表示。
【1.0】
class Solution {
public boolean isValidSudoku(char[][] board) {
boolean isFlag = true;
for (int i = 0; i < board.length; i++)
{
for (int j = 0; j < board[i].length; j++)
{
for (int k = j+1; k < board[i].length - j - 1; k++)
{
if (board[i][j] == board[i][k] && board[i][j] != '.')
{
isFlag = false;
break;
}
}
for (int k = i+1; k < board[i].length - j - 1; k++)
{
if (board[i][j] == board[k][j] && board[i][j] != '.')
{
isFlag = false;
break;
}
}
if (isFlag==false)
break;
}
if (isFlag==false)
break;
}
return isFlag;
}
}
【2.0】
class Solution {
public boolean isValidSudoku(char[][] board) {
int length = board.length;
int[][] line = new int[length][length];
int[][] column = new int[length][length];
int[][] cell = new int[length][length];
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length; j++)
{
if (board[i][j] == '.')//如果还没有填数字,直接跳过
continue;
int num = board[i][j] - '0' - 1; //将当前格子字符转换为数字
int k = i / 3 * 3 + j / 3 ; //k是第几个单元格,9宫格数独横着和竖着都是3个单元格
if (line[i][num] != 0 || column[j][num] != 0 || cell[k][num] != 0)
return false;
//表示第i行有num这个数字,第j列有num这个数字,对应的单元格内也有num这个数字
line[i][num] = column[j][num] = cell[k][num] = 1;
}
}
return true;
}
}
以上是关于LC 有效的数独的主要内容,如果未能解决你的问题,请参考以下文章