runtime 15 ms, beats 98.64% of cpp submissions
O(n^2) solution with explanation
tags: none
🔗 link
Valid Sudoku
📖 description
給定一個 9 x 9 的 array 表示一個數獨題目,判斷這個版面是否是一個合法的數獨。 
🧠 solution
只需要根據數獨的定義模擬即可,即同一行或列不能出現重複的數字,且畫分的九個區間也不能出現重複的數字。
我們可以利用暴力法去檢查所有狀態,但其實可以藉由把看過的物件儲存起來,來減少搜尋次數到只需要遍歷一次數獨版面。
⏳ time complexity
遍歷一次數獨版面,時間複雜度 O(n^2)
總時間複雜度 O(n^2)
📝 code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | class Solution { public:     bool isValidSudoku(vector<vector<char>>& board) {         vector<vector<bool>> rows(9,vector<bool>(10,false)),cols(9,vector<bool>(10,false)),blocks(9,vector<bool>(10,false));                           
          int curr,blockId;         for(int i=0;i<9;i++){             for(int j=0;j<9;j++){                 if(board[i][j] == '.'){                     continue;                 }                 blockId = (i/3)*3 + j/3;                     curr = board[i][j]-'0';     
                                   if(rows[i][curr] || cols[j][curr] || blocks[blockId][curr]){                     return false;                 }
                                   rows[i][curr] = true;                 cols[j][curr] = true;                 blocks[blockId][curr] = true;             }         }         return true;     } };
  |