【LintCode】判斷數獨合法
問題:
請判定一個數獨是否有效。該數獨可能只填充了部分數字,其中缺少的數字用 . 表示。
注意事項:一個合法的數獨(僅部分填充)並不一定是可解的。我們僅需使填充的空格有效即可。
分析:
首先明確合法要求:
1. 每行數字不重複
2. 每列數字不重複
3. 每個九宮格內數字不重複
思路:
- 判斷每行數字不重複:使用9*9的布林型陣列row[][],初始化時元素全為false。遍歷輸入的陣列,給陣列row賦值,raw[i][j] = true, 其中 i 表示行數,j表示該行中出現的數字,即第i行出現過j,則row[i][j] = true。遍歷賦值的時候如果發現raw[i][j]已經為true,直接返回false(不合法)。
- 判斷列的方式同行。
- 判斷每個九宮格內數字不重複:方法與行類似,但是這時候的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
【vijos】P1335 數獨驗證
背景 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
【LintCode】060.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
【Lintcode】074.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
【Lintcode】038.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
【Lintcode】069.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
【Lintcode】098.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-
【Lintcode】102.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->
【Lintcode】099.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
【Lintcode】105.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
【Lintcode】029.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 網速慢 可見 就會 先從一個列子來說:我們經常聽到說某某網站的每天訪問用戶數有幾十,幾千,幾百萬甚至上千萬,同時在線用戶數有幾萬,幾十萬的。從這個列子我們來分析,數據庫並發的概念。首先,這兒有兩個名詞,一個是每天訪問的用