題目描述:
判斷一個9*9的數獨是否有效。隻需根據以下規則,驗證已經填入的數字是否有效即可。
解析:
本題的主要解題思路在于:建立哈希表(鍵值對關系),來表示存儲任意個數在該次元上(行、列、九宮格box)是否出現過。
周遊條件分為三種;
【1】第i個行中是否出現
【2】第j個行中是否出現
【3】第j/3+(i/3)*3個box中是否出現
具體代碼如下:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int row[9][10]={0};//建立行所對應的哈希表,有9行,而10列是為了與哈希表對應起來
int col[9][10]={0};//建立列所對應的哈希表,預設每一列都沒有出現數字
int box[9][10]={0}; //對應九宮格box
//采用兩層for循環周遊
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
//在第i行第j列進行三個條件的判斷
if(board[i][j]=='.') continue; //如果該數為空,繼續搜尋
int curNumber=board[i][j]-'0'; //轉換為數字
if(row[i][curNumber]) return false; //重複出現了
if(col[j][curNumber]) return false;
if(box[j/3+(i/3)*3][curNumber]) return false;
row[i][curNumber] = 1; //之前沒有遇見,則置為1
col[j][curNumber] = 1;
box[j/3 + (i/3)*3][curNumber] = 1;
}
}
return true; //其他情況傳回為真
}
};