LeetCode 36 Valid Sudoku

来源:互联网 发布:lockin china 知乎 编辑:程序博客网 时间:2024/06/05 10:37

题意:

判断一个填了一部分的数独有没有解。


思路:

按照数独规则判断即可,即同一行、同一列、同一个3*3的方格内没有数字重复出现。


代码:

class Solution {public:    bool isValidSudoku(vector <vector<char>> &board) {        const int step = 3;        bool app[step * step];        for (int i = 0; i < step * step; ++i) {            memset(app, 0, sizeof(app));            for (int j = 0; j < step * step; ++j) {                if (board[i][j] != '.') {                    if (app[board[i][j] - '1']) {                        return false;                    } else {                        app[board[i][j] - '1'] = true;                    }                }            }            memset(app, 0, sizeof(app));            for (int j = 0; j < step * step; ++j) {                if (board[j][i] != '.') {                    if (app[board[j][i] - '1']) {                        return false;                    } else {                        app[board[j][i] - '1'] = true;                    }                }            }            memset(app, 0, sizeof(app));            int x = i / 3 * 3, y = i % 3 * 3;            for (int j = 0; j < step * step; ++j) {                int dx = j / 3 + x, dy = j % 3 + y;                if (board[dx][dy] != '.') {                    if (app[board[dx][dy] - '1']) {                        return false;                    } else {                        app[board[dx][dy] - '1'] = true;                    }                }            }        }        return true;    }};