[leetcode]36. 有效的数独

1.题目:
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
即:
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次

示例 :
输入:
[
  ["5","3",".",".","7",".",".",".","."],
  ["6",".",".","1","9","5",".",".","."],
  [".","9","8",".",".",".",".","6","."],
  ["8",".",".",".","6",".",".",".","3"],
  ["4",".",".","8",".","3",".",".","1"],
  ["7",".",".",".","2",".",".",".","6"],
  [".","6",".",".",".",".","2","8","."],
  [".",".",".","4","1","9",".",".","5"],
  [".",".",".",".","8",".",".","7","9"]
]
输出: true

2.代码:

/*
建立三个数组:
row[x][y]=true:第x行的'y'已存在;
col[x][y]=true:第x列的'y'已存在;
block[x][y]=true:第x块的'y'已存在;
行、列、块都是以行存储;
bindex(0~9):每列一共有3个块,i/3得到该块在哪一行;每行有3个块,j/3得到该块在哪一列;
			(i/3)*3+(j/3)将块的二维坐标转为一维坐标;
*/
bool isValidSudoku(char** board, int boardRowSize, int boardColSize) {
    bool row[9][9];
    bool col[9][9];
    bool block[9][9];
    for(int i=0;i<9;i++)
        for(int j=0;j<9;j++){
            row[i][j]=false;
            col[i][j]=false;
            block[i][j]=false;
        }
    for(int i=0;i<9;i++){
        for(int j=0;j<9;j++){
            if(board[i][j]!='.'){                
                int x=board[i][j]-'1';
                int bindex=(i/3)*3+(j/3);
                if(row[i][x]||col[j][x]||block[bindex][x])
                    return false;
                else{
                    row[i][x]=true;
                    col[j][x]=true;
                    block[bindex][x]=true;
                }
            }
        }
    }
    return true;
}

3.知识点:

NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值