1. 程式人生 > >Leetcode:36. 有效的數獨

Leetcode:36. 有效的數獨

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

  1. 數字 1-9 在每一行只能出現一次。
  2. 數字 1-9 在每一列只能出現一次。
  3. 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。

上圖是一個部分填充的有效的數獨。

數獨部分空格內已填入了數字,空白格用 '.' 表示。

示例 1:

輸入:
[
  ["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

示例 2:

輸入:
[
  ["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 存在, 因此這個數獨是無效的。

說明:

  • 一個有效的數獨(部分已被填充)不一定是可解的。
  • 只需要根據以上規則,驗證已經填入的數字是否有效即可。
  • 給定數獨序列只包含數字 1-9 和字元 '.' 。
  • 給定數獨永遠是 9x9 形式的。

解題思路:

用hash的方法,做到遍歷一次9*9的表格,就能完全判斷這個數獨是否有效。

數獨:每一行,每一列,每個小格子(3*3)中都僅有一個1-9

666666666666666666666
更多細節
C++程式碼

class Solution{

public:
    bool isValidSudoku(vector<vector<char>>& board) {
        int x, y,num;
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                int data = board[i - 1][j - 1] - '0' - 1;
                if (board[i - 1][j - 1] == '.') continue;
                x = (i <= 3 ? 1 : (i <= 6 ? 2 : 3));
                y = (j <= 3 ? 1 : (j <= 6 ? 2 : 3));
                num = (y - 1) * 3 + x;
                if (hash_x[i - 1][data] == true) return false;
                else hash_x[i - 1][data] = true;
                if (hash_y[j - 1][data] == true) return false;
                else hash_y[j - 1][data] = true;
                if (hash[num - 1][data] == true) return false;
                else hash[num - 1][data] = true;
            }
        }
        return true;
    }
private:
    bool hash_x[9][9];
    bool hash_y[9][9];
    bool hash[9][9];
};

相關推薦

leetcode-36-有效

bool isValidSudoku(vector<vector<char>>& board) { int row[9][9] = {0}, col[9][9] = {0}, box[9][9] = {0}; for (int i =

Leetcode演算法——36、判斷有效

判斷一個 9*9 的數獨面板是否是有效的。 如果已經被填充的數字滿足以下條件,則說明是有效的: 每一行只能包含無重複數字1-9 每一列只能包含無重複數字1-9 每一個 3*3 的子面板只能包含無重複數字1-9 備註: 一個有效的數獨面板(

LeetCode 36. 有效 Valid Sudoku(C語言)

題目描述: 判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。 上圖是一個部分填

LeetCode-36. 有效

題目地址:https://leetcode-cn.com/problems/valid-sudoku/ 思路:暴力 AC程式碼: class Solution { public: bool isValidSudoku(vector<vector<char>&

Leetcode:36. 有效

判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。 上圖是一個部分填充的有效的數獨。

leetcode 36. 有效

span ret 默認 方法 python already read 事情 lse 由於工作原因,以後A題一般都使用Python,不得不說Python還挺方便的,作為一個腳本語言學好了,會省很多事情。 判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數

Leetcode 36. 有效 C++

判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。 上圖是一個部分填充的有效的數獨。

leetcode 36. 有效 (python)

判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1-9 在每一行只能出現一次。數字 1-9 在每一列只能出現一次。數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。上圖是一個部分填充的有效的數獨。數獨部分空格內已填入了

[LeetCode] 36. 有效

square 復雜度 部分 dig 更多 填充 數字 一個 因此 題目鏈接: https://leetcode-cn.com/problems/valid-sudoku/ 題目描述: 判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。

Leetcode題庫——36.有效

@author: ZZQ @software: PyCharm @file: leetcode36_isValidSudoku.py @time: 2018/11/19 19:27 要求:判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現

Leetcode演算法Java全解答--36. 有效

Leetcode演算法Java全解答–36. 有效的數獨 文章目錄 Leetcode演算法Java全解答--36. 有效的數獨 題目 想法 結果 總結 程式碼 我的答案 大佬們的答案

Leetcode 的強大之處  演算法題解 in Swift ( 有效 , 36 ) 及其 Code Review

Leetcode 的強大之處,挺多的。 本文寫的是,其強大的討論區。 討論區裡面,有各種具有啟發性的程式碼。 (換句話說,就是有很強的程式碼。看了,覺得腦洞大開,大神們把語言的語法特性發揮到了極致) 裡面有各種常見語言的實現 ( 這裡指 Leetcode 主站的, 中文站點的同一功能弱了一點 )

36.有效-Python-LeetCode

一、題目 二、解法 結語 一、題目 判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現

LeetCode36. 有效

題目描述 判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗

LeetCode演算法題36有效解析

判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。 上圖是一個部分填充的有效的數獨。

LeetCode——第36題:有效

時間:27ms 題目: 判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。

LeetCode 36. Valid Sudoku 判斷9*9的板是否有效

Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules: Each row must cont

LeetCode36有效

題目描述判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1-9 在每一行只能出現一次。數字 1-9 在每一列只能出現一次。數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。上圖是一個部分填充的有效的數獨。數獨部分空格內

leetCode 36.Valid Sudoku(有效) 解題思路和方法

Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be partially filled, where

swift 有效 - LeetCode

判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的&nbs