天天看點

Leetcode典型題解答和分析、歸納和彙總——T36(有效的數獨)

題目描述:

判斷一個9*9的數獨是否有效。隻需根據以下規則,驗證已經填入的數字是否有效即可。

Leetcode典型題解答和分析、歸納和彙總——T36(有效的數獨)
Leetcode典型題解答和分析、歸納和彙總——T36(有效的數獨)
Leetcode典型題解答和分析、歸納和彙總——T36(有效的數獨)

解析:

本題的主要解題思路在于:建立哈希表(鍵值對關系),來表示存儲任意個數在該次元上(行、列、九宮格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; //其他情況傳回為真
    }
};
           

繼續閱讀