题解 | #暮光数独验证#

暮光数独验证

https://www.nowcoder.com/practice/68dd2d15263f433db6ffa0405d08426a

傻逼题目是真的傻逼,还非要说“但这里的规则稍有不同”,不同你个嘚不同;

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param board char字符型vector<vector<>> 
     * @return bool布尔型
     */
    bool isValidTwilightSudoku(vector<vector<char> >& board) {
        // write code here
        // 不用求解,只需验证是否有效即可
        // 利用三个哈希表,分别验证 行、列、宫
        map<int,set<int>> m_row, m_col, m;
        int row = board.size();
        int col = board[0].size();

        for(int i=0; i<row; ++i)
        {
            for(int j=0; j<col; ++j)
            {
                if(board[i][j]!='.')
                {
                    if(m_row[i].count(board[i][j]))
                        return false;
                    if(m_col[j].count(board[i][j]))
                        return false;
                    int t = i/3*2+j/3;
                    if(m[t].count(board[i][j]))
                        return false;
                    // 判断稍有不同的那些规则
                    // 注意t从0开始
                    // if(((t==0||t==4||t==8) && (board[i][j]!=1&&board[i][j]!=2&&board[i][j]!=3)) || ((t==1||t==5) && (board[i][j]!=4&&board[i][j]!=5&&board[i][j]!=6)) || ((t==2||t==6) && (board[i][j]!=7&&board[i][j]!=8&&board[i][j]!=9)))
                    // {
                    //     cout << "t = " << t << " board[i][j] = " << board[i][j] << endl;
                    //     return false;
                    // }

                    m_row[i].emplace(board[i][j]);
                    m_col[j].emplace(board[i][j]);
                    m[t].emplace(board[i][j]);
                }
            }
        }

        return true;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务