1. 程式人生 > >[LeetCode] Valid Sudoku 驗證數獨

[LeetCode] Valid Sudoku 驗證數獨

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

A partially filled sudoku which is valid.

Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

這道題讓我們驗證一個方陣是否為數獨矩陣,判斷標準是看各行各列是否有重複數字,以及每個小的3x3的小方陣裡面是否有重複數字,如果都無重複,則當前矩陣是數獨矩陣,但不代表待數獨矩陣有解,只是單純的判斷當前未填完的矩陣是否是數獨矩陣。那麼根據數獨矩陣的定義,我們在遍歷每個數字的時候,就看看包含當前位置的行和列以及3x3小方陣中是否已經出現該數字,那麼我們需要三個標誌矩陣,分別記錄各行,各列,各小方陣是否出現某個數字,其中行和列標誌下標很好對應,就是小方陣的下標需要稍稍轉換一下,具體程式碼如下:

class Solution {
public:
    bool isValidSudoku(vector<vector<char
> > &board) { if (board.empty() || board[0].empty()) return false; int m = board.size(), n = board[0].size(); vector<vector<bool> > rowFlag(m, vector<bool>(n, false)); vector<vector<bool> > colFlag(m, vector<bool>(n, false
)); vector<vector<bool> > cellFlag(m, vector<bool>(n, false)); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (board[i][j] >= '1' && board[i][j] <= '9') { int c = board[i][j] - '1'; if (rowFlag[i][c] || colFlag[c][j] || cellFlag[3 * (i / 3) + j / 3][c]) return false; rowFlag[i][c] = true; colFlag[c][j] = true; cellFlag[3 * (i / 3) + j / 3][c] = true; } } } return true; } };

相關推薦

[LeetCode] Valid Sudoku 驗證

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

Leetcode #37. Sudoku Solver 求解 結題報告

1 解題報告 做法就只能是暴力的回溯了。。 方法是回溯,用各個標誌位來標誌是否存在衝突 如果數字原來就有了,那麼就跳過處理 因為答案只有一個,所以一旦找到,就要立馬跳出遞迴(如果你用的是棧實現的回溯可能會好處理些) 總之就是仔細些。。。我一次寫過的,而

LintCode Valid Sudoku 判斷是否合法

請判定一個數獨是否有效。 該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。 樣例 下列就是一個合法數獨的樣例。 Determine whether a Sudoku is valid. The Sudoku board could be par

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

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

36. Valid Sudoku/37. Sudoku Solver - 問題-- backtracking 經典

題意: 經典的遞迴題, 要求:除了要求 橫豎都填滿 1~9外, 每個3*3也都要求滿足 1~9  36. 陣列可以部分填充, 問是否一個有效的 sudoku.  寫了個好燒腦的 四重迴圈來check 3*3 的部分。  重點在於 用陣列作為hash 。 然後對於 che

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】有效的(Python解答)

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

LeetCode題目--有效的(python/Java實現)

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

HDU-4069___Squiggly Sudoku——鋸齒 BFS + DLX

題目大意:      給你一個鋸齒數獨的圖,每個凹凸形狀的宮的上下左右邊界以及格子裡的數字都給出相應的計算規則,要你求這個數獨的唯一解,或者輸出 000 解或多解 解題思路:     數獨模板題,關鍵在於宮的變換,我們回想之前處理數獨的宮的方法,首先要對每個數

LeetCode-36. 有效的

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

[LeetCode] Valid Number 驗證數字

Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => true Note: It is inte

[LeetCode] Valid Parentheses 驗證括號

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the co

[LeetCode] Valid Anagram 驗證變位詞

Given two strings s and t, write a function to determine if t is an anagram of s. For example, s = "anagram", t = "nagaram", return true. s = "rat", t

[LeetCode] Valid Palindrome 驗證迴文字串

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases. For example, "A man, a plan, a canal: Pa

LeetCode Valid Palindrome(驗證迴文字串)

題目: 給定一個字串,判斷其中包含數字和字母的部分是否是迴文字串(忽略大小寫),即判斷該字串是不是正向和反向讀取的結果一致。 解題思路: 本題的解題方法比較暴力直接,先遍歷一遍字串,將字串中的所有非數字和字母的部分刪除,並將所有的大寫字母轉為小寫字母,再設定兩個指標,分別從

LeetCode Valid Sudoku

LeetCode解題之Valid Sudoku 原題 判斷一個給出的數獨模型是否符合要求。 注意點: 該模型不需要填完整,沒有填寫的用”.”表示 不用關心該模型是否有解,只需要判斷現有情況 例子: 輸入: board=[“..4…63.”

Leetcode:36. 有效的

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

leetcode 36. 有效的

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

【模擬】【RQNOJ】驗證

題目描述   Alunay最近迷上了數獨這個遊戲,他在完成一個數獨後總要費一些時間來檢查。於是他把Whitegene作為苦力拽來幫他檢查。由於Whitegene是搞OI的,所以他就想寫個程式來判斷Alunay完成的數獨是否正確。不過最近他在感情上遇到了一些問題沒有功夫去寫,就

Leetcode 36. 有效的 C++

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