1. 程式人生 > >【LintCode】判斷數獨合法

【LintCode】判斷數獨合法

問題:

請判定一個數獨是否有效。該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。
注意事項:一個合法的數獨(僅部分填充)並不一定是可解的。我們僅需使填充的空格有效即可。

例圖

分析:

首先明確合法要求:
1. 每行數字不重複
2. 每列數字不重複
3. 每個九宮格內數字不重複

思路:

  1. 判斷每行數字不重複:使用9*9的布林型陣列row[][],初始化時元素全為false。遍歷輸入的陣列,給陣列row賦值,raw[i][j] = true, 其中 i 表示行數,j表示該行中出現的數字,即第i行出現過j,則row[i][j] = true。遍歷賦值的時候如果發現raw[i][j]已經為true,直接返回false(不合法)。
  2. 判斷列的方式同行。
  3. 判斷每個九宮格內數字不重複:方法與行類似,但是這時候的i表示的不是行數,而是第幾個九宮格(從左到右,從上到下的順序)。第幾個九宮格的計算方法可根據當前元素的位置計算得到。如第[i][j]個元素出現在從左到右,從上到下的第 (i/3)*3+j/3 個九宮格中。

解法:

public class Solution {
    /*
     * @param board: the board
     * @return: whether the Sudoku is valid
     */
   public boolean isValidSudoku
(char[][] board) { // write your code here boolean[][] row = new boolean[9][9]; boolean[][] column = new boolean[9][9]; boolean[][] cube = new boolean[9][9]; for(int i =0;i<9;i++){ for(int j = 0 ;j<9;j++){ if( board[i][j]!='.') { int
val = board[i][j]-'1'; if (!row[i][val] ) row[i][val] = true; else return false; } } } for(int i =0;i<9;i++){ for(int j = 0 ;j<9;j++){ if( board[i][j]!='.') { int val = board[i][j]-'1'; if (!column[j][val]) column[j][val] = true; else return false; } } } for(int i =0;i<9;i++){ for(int j = 0 ;j<9;j++){ if( board[i][j]!='.'){ int val = board[i][j]-'1'; if (!cube[(i/3)*3+j/3][val] ) cube[(i/3)*3+j/3][val] = true; else return false; } } } return true; } }

感謝閱讀!

相關推薦

LintCode判斷合法

問題: 請判定一個數獨是否有效。該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。 注意事項:一個合法的數獨(僅部分填充)並不一定是可解的。我們僅需使填充的空格有效即可。

三次過Lintcode 389. 判斷是否合法

請判定一個數獨是否有效。 該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。 樣例 The following partially filed sudoku is valid. 解題思路: 驗證數獨是否有效,就三個要求: 1.數字1-9在每一行最多隻能出

JS----判斷據類型的方法

圖片 return 數組 方案 toolbar 字符串 pan asc lee 對js中不同數據的布爾值類型總結:false:空字符串;null;undefined;0;NaN。true:除了上面的false的情況其他都為true; 如下: var o = {

lintcode之和、三之和、最接近的三之和、四之和小結

兩數之和 給一個整數陣列,找到兩個數使得他們的和等於一個給定的數 target。 你需要實現的函式twoSum需要返回這兩個數的下標, 並且第一個下標小於第二個下標。 注意這裡下標的範圍是 1 到 n

vijosP1335 驗證

背景 XX學校風靡一款智力遊戲,也就是數獨(九宮格),先給你一個數獨,並需要你驗證是否符合規則。 描述 具體規則如下: 每一行都用到1,2,3,4,5,6,7,8,9,位置不限, 每一

模擬RQNOJ驗證

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

LintCode算法題解——判斷是否合法、平面列表、克隆二叉樹、序列排號

inf fsg lfa get com tor pad ofa 算法題解 72bkw1儷詠倒竿擲纖http://tushu.docin.com/cek677n63e1h盼竊酚耘虐概http://docstore.docin.com/tpuda56936qi5pa2鈉捕輾押杉

LintCode Valid Sudoku 判斷是否合法

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

python_lintcode_96. 連結串列劃分_389. 判斷是否合法

96. 連結串列劃分 題目 給定一個單鏈表和數值x,劃分連結串列使得所有小於x的節點排在大於等於x的節點之前。 你應該保留兩部分內連結串列節點原有的相對順序。 樣例 給定連結串列 1->4->3->2->5->2-

判斷是否合法

請判定一個數獨是否有效。 該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。 樣例 下列就是一個合法數獨的樣例。 class Solution {     /**       * @param board: the board         @return

LintCode060.Search Insert Position

spa posit art you sta ger har duplicate earch 題目: Given a sorted array and a target value, return the index if the target is found. If no

Lintcode074.First Bad Version

ota class base found sed follow ntc art spa 題目: The code base version is an integer start from 1 to n. One day, someone committed a bad v

Lintcode038.Search a 2D Matrix II

ger class duplicate ntc sts ram public win param 題目: Write an efficient algorithm that searches for a value in an m x n matrix, return th

Lintcode069.Binary Tree Level Order Traversal

vector pub i++ pre oot order ptr values logs 題目: Given a binary tree, return the level order traversal of its nodes‘ values. (ie, from le

Lintcode098.Sort List

col || lin lex strong span tro con pre 題目: Sort a linked list in O(n log n) time using constant space complexity. Example Given 1->3-

Lintcode102.Linked List Cycle

node false col lint tro head -s tno cycle 題目: Given a linked list, determine if it has a cycle in it. Example Given -21->10->4->

Lintcode099.Reorder List

ive strong linked size reorder right find lan second 題目: Given a singly linked list L: L0 → L1 → … → Ln-1 → Ln reorder it to: L0 → Ln → L

Lintcode105.Copy List with Random Pointer

map class node link listnode span public point turn 題目: A linked list is given such that each node contains an additional random pointer

Lintcode029.Interleaving String

ngs logs eth str tro determine span lintcode return 題目: Given three strings: s1, s2, s3, determine whether s3 is formed by the interlea

Oracle oracle據庫的並發初步理解

數據交互 空閑 details cti 但是 art 網速慢 可見 就會 先從一個列子來說:我們經常聽到說某某網站的每天訪問用戶數有幾十,幾千,幾百萬甚至上千萬,同時在線用戶數有幾萬,幾十萬的。從這個列子我們來分析,數據庫並發的概念。首先,這兒有兩個名詞,一個是每天訪問的用