LeetCode 36 有效的數獨
阿新 • • 發佈:2020-11-02
LeetCode36 有效的數獨
題目描述
判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。
- 數字
1-9
在每一行只能出現一次。 - 數字
1-9
在每一列只能出現一次。 - 數字
1-9
在每一個以粗實線分隔的3x3
宮內只能出現一次。
樣例
輸入: [ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".","."], [".","9","8",".",".",".",".","6","."], ["8",".",".",".","6",".",".",".","3"], ["4",".",".","8",".","3",".",".","1"], ["7",".",".",".","2",".",".",".","6"], [".","6",".",".",".",".","2","8","."], [".",".",".","4","1","9",".",".","5"], [".",".",".",".","8",".",".","7","9"] ] 輸出: true
輸入: [ ["8","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".","."], [".","9","8",".",".",".",".","6","."], ["8",".",".",".","6",".",".",".","3"], ["4",".",".","8",".","3",".",".","1"], ["7",".",".",".","2",".",".",".","6"], [".","6",".",".",".",".","2","8","."], [".",".",".","4","1","9",".",".","5"], [".",".",".",".","8",".",".","7","9"] ] 輸出: false 解釋: 除了第一行的第一個數字從 5 改為 8 以外,空格內其他數字均與 示例1 相同。 但由於位於左上角的 3x3 宮內有兩個 8 存在, 因此這個數獨是無效的。
演算法分析
模擬題
- 模擬行
- 模擬列
- 模擬九宮格
時間複雜度\(O(81)\)
Java程式碼
class Solution { public boolean isValidSudoku(char[][] board) { int n = 9; boolean[] st = new boolean[10]; //行 for(int i = 0; i < n; i++){ Arrays.fill(st, false); for(int j = 0; j < n; j++){ if(board[i][j]!='.'){ int t = board[i][j] - '0'; if(st[t]) return false; st[t] = true; } } } //列 for(int i = 0; i < n; i++){ Arrays.fill(st, false); for(int j = 0; j < n; j++){ if(board[j][i]!='.'){ int t = board[j][i] - '0'; if(st[t]) return false; st[t] = true; } } } //九宮格 for(int i = 0; i < n; i+=3){ for(int j = 0; j < n; j+=3){ Arrays.fill(st, false); for(int u = 0; u < 3;u++){ for(int v = 0; v < 3; v++){ if(board[i+u][j+v] != '.'){ int t = board[i+u][j+v] - '0'; if(st[t]) return false; st[t] = true; } } } } } //檢測完畢 return true; } }