首页 > 其他 > 详细

微软面试题: LeetCode 36. 有效的数独 出现次数:3

时间:2021-04-01 23:50:35      阅读:49      评论:0      收藏:0      [点我收藏+]

题目描述:

技术分享图片

 

 代码:

       

 1 class Solution {
 2 public:
 3     bool isValidSudoku(vector<vector<char>>& board)
 4     {
 5         unordered_map<int,unordered_set<char>> r_memo;//某行的所有元素
 6         unordered_map<int,unordered_set<char>> c_memo;//某列的所有元素
 7         unordered_map<int,unordered_set<char>> t_memo;//某方格的所有元素
 8         for(int i = 0; i < 9; ++i)
 9         {
10             for(int j = 0; j < 9; ++j)
11             {
12                if(board[i][j] == .)   continue;
13                //当前元素 在所在行是否已经出现过,出现过直接返回false
14                if(r_memo.find(i) != r_memo.end() && r_memo[i].find(board[i][j]) != r_memo[i].end())
15                {
16                    return false;
17                }
18                r_memo[i].insert(board[i][j]);//所在行未出现过,记录到所在行的字典里
19               //当前元素 在所在列是否已经出现过,出现过直接返回false
20                if(c_memo.find(j) != c_memo.end() && c_memo[j].find(board[i][j]) != c_memo[j].end())
21                {
22                    return false;
23                }
24                c_memo[j].insert(board[i][j]);//所在列未出现过,记录到所在列的字典里
25                
26                int k = 3 * (i/3) + j/3; // 3 * x + y  根据当前元素坐标 算出所属的 九宫格序号[0,8]
27                //当前元素 在所在九宫格是否已经出现过,出现过直接返回false
28                if(t_memo.find(k) != t_memo.end() && t_memo[k].find(board[i][j]) != t_memo[k].end())
29                {
30                    return false;
31                }
32                t_memo[k].insert(board[i][j]);//所在九宫格未出现过,记录到所在九宫格的字典里
33             }
34         }
35         return true;
36     }
37 };

 

微软面试题: LeetCode 36. 有效的数独 出现次数:3

原文:https://www.cnblogs.com/wangxf2019/p/14607672.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!