一天一演算法(18) 有效的數獨

2021-09-24 07:33:20 字數 1823 閱讀 7495

有效的數獨

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

數字 1-9 在每一行只能出現一次。

數字 1-9 在每一列只能出現一次。

數字 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、乙個有效的數獨(部分已被填充)不一定是可解的。

2、只需要根據以上規則,驗證已經填入的數字是否有效即可。

3、給定數獨序列只包含數字 1-9 和字元 『.』 。

4、給定數獨永遠是 9x9 形式的。

public class solution 

}return true;}}

public bool isvalidsudoku(char board) 

private bool linecompare(char a,hashsethash)}}

}return true;

}private bool threecompare(chara,int rindex,int cindex,hashsethash)}}

}cindex=cindex+3;

}cindex=0;

rindex=rindex+3;

} return true;

}

一天一演算法(23) 有效的字母異位詞

有效的字母異位詞 給定兩個字串 s 和 t 編寫乙個函式來判斷 t 是否是 s 的字母異位詞。示例 1 輸入 s anagram t nagaram 輸出 true 示例 2 輸入 s rat t car 輸出 false 說明 你可以假設字串只包含小寫字母。高階 如果輸入字串包含 unicode ...

一天一演算法(1) 快速排序

我去網上檢視了快速排序的 千篇一律,簡直乙個模子裡面印出來的,這樣沒意思,用的都是別人的思路。於是我自己動手寫了乙個,雖然 不夠簡潔,但是我覺得排序的目的應該達到了 快速排序演算法無非就是利用左右兩個指標,向左或者向右遍歷陣列,並且與基準點比較,從而達到排序的目的 首先 假設我們的無序數列是 5,1...

一天一演算法之歸併排序

歸併排序是3個時間複雜度為o nlogn 唯一乙個穩定的演算法,不過自己沒有實現出來。還好別人的 看懂了。using system using system.collections.generic using system.linq using system.text namespace sort ...