36. Valid Sudoku LeetCode 很酷的轉換矩陣

Bear熊
2 min readAug 4, 2020

--

其實這題就是用類似hashset的概念

確定三個矩陣裡面有沒有存在過(橫的 直的 九宮格)

C++ 的Char to int , int num = board[i][j] - '0'

class Solution
{
public:
bool isValidSudoku(vector<vector<char> > &board)
{
int used1[9][9] = {0}, used2[9][9] = {0}, used3[9][9] = {0};

for(int i = 0; i < board.size(); ++ i)
for(int j = 0; j < board[i].size(); ++ j)
if(board[i][j] != '.')
{
int num = board[i][j] - '0' - 1, k = i / 3 * 3 + j / 3;
if(used1[i][num] || used2[j][num] || used3[k][num])
return false;
used1[i][num] = used2[j][num] = used3[k][num] = 1;
}

return true;
}
};

只是解法裡面有一很酷的轉換法

k = i / 3 * 3 + j / 3
//他可以讓他看起來長得像下面這樣
0 0 0 | 1 1 1 | 2 2 2
0 0 0 | 1 1 1 | 2 2 2
0 0 0 | 1 1 1 | 2 2 2
--------+---------+---------
3 3 3 | 4 4 4 | 5 5 5
3 3 3 | 4 4 4 | 5 5 5
3 3 3 | 4 4 4 | 5 5 5
--------+---------+--------
6 6 6 | 7 7 7 | 8 8 8
6 6 6 | 7 7 7 | 8 8 8
6 6 6 | 7 7 7 | 8 8 8

也可套用到 2*2

k = i / 2 * 2 + j / 2

--

--