LeetCode题解:Valid Sudoku

Valid Sudoku

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

The Sudoku board could be partially filled, where empty cells are filled with the character'.'.


A partially filled sudoku which is valid.

思路:

遍历整个棋盘,记录每一行,每一列,每一块用过的数字。一旦发现一个数字在行,列,块上有重复则报错。

题解:

// ⑨者,笨蛋也
#define BAKA 9

class Solution {
public:
    bool isValidSudoku(vector<vector<char> > &board) {
        array<bool, BAKA> row[BAKA];
        array<bool, BAKA> col[BAKA];
        array<bool, BAKA> box[BAKA];

        // as standard C array
        // the variables are not initialized...
        for(auto r = 0; r < BAKA; ++r)
            for(auto c = 0; c < BAKA; ++c)
                row[r][c] = col[r][c] = box[r][c] = false;

        for(auto r = 0; r < BAKA; ++r)
            for(auto c = 0; c < BAKA; ++c)
            {
                char ch=board[r][c];
                if (ch == '.')
                    continue;   // blank, no effect
                
                ch -= '1';
                
                if (row[r][ch])
                    return false;
                row[r][ch] = true;
                
                if (col[c][ch])
                    return false;
                col[c][ch] = true;
                
                if (box[r / 3 * 3 + c / 3][ch])
                    return false;
                box[r / 3 * 3 + c / 3][ch] = true;
            }
            
        return true;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值