LeetCode 36.有效的數(shù)獨(dú) (Swift)

判斷一個(gè) 9x9 的數(shù)獨(dú)是否有效置谦。只需要根據(jù)以下規(guī)則堂鲤,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可。
數(shù)字 1-9 在每一行只能出現(xiàn)一次媒峡。
數(shù)字 1-9 在每一列只能出現(xiàn)一次瘟栖。
數(shù)字 1-9 在每一個(gè)以粗實(shí)線分隔的 3x3 宮內(nèi)只能出現(xiàn)一次。


image.png

示例:

      let board:[[Character]] = [
        ["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"]
       ]

解題思路

需滿足條件的話丝蹭,①每一行 && ②每一列 && ③每個(gè)對應(yīng)3x3矩陣慢宗,都不存在重復(fù)的元素(1-9)
稍微正常點(diǎn)解法:
// 直接循環(huán)判斷
extension Set where Element == Character {
    
    mutating func isContain(_ e: Element) -> Bool {
        let oldSet = self
        self.insert(e)
        return oldSet.contains(e)
    }
}

func isValidSudoku(_ board: [[Character]]) -> Bool {

    for i in 0..<9 {
        var row:Set<Character> = []
        var colum:Set<Character> = []
        var cube:Set<Character> = []

        for j in 0..<9 {

            // row
            if board[i][j] != "." && row.isContain(board[i][j]) {
                return false
            }

            // column
            if board[j][i] != "." && colum.isContain(board[j][i]) {
                return false
            }

            // cube
            let r = i / 3 * 3 + j / 3
            let c = i % 3 * 3 + j % 3
            if board[r][c] != "." && cube.isContain(board[r][c]) {
                return false
            }
        }
    }
    return true
}  // 25.9050130844116 ms
人生要有點(diǎn)儀式感,在不考慮時(shí)間復(fù)雜度情況下奔穿,來點(diǎn)騷操作??
// 把所有需要判斷的條件抽出來=>3x9行再進(jìn)行判斷
extension Array where Element == [Character] {

    func isValidSudoku() -> Bool {
    
        let rowBoard = self

        let colBoard = Set(0..<9).map { i -> [Character] in
                         self.map { row -> Character in row[i] }
                       }
        
        let cubeBoard = Set(0..<9).map { i -> [Character] in
                        Set(0..<9).map{ j -> Character in
                            let r = i / 3 * 3 + j / 3
                            let c = i % 3 * 3 + j % 3
                            return self[r][c]
                        }}
        
        for row in (rowBoard + colBoard + cubeBoard) {
            let nums = row.filter { $0 != "." }
            if nums.count == Set(nums).count {
                continue
            } else {
                return false
            }
        }
        return true
    }
}


board.isValidSudoku() // 28.2009840011597 ms
其實(shí)一道題的解法多種多樣镜沽,對于一個(gè)問題沒有最優(yōu)的算法,最優(yōu)是相對參照物而言贱田,看參照物是什么缅茉。參照物可以是時(shí)間、空間男摧、可讀性蔬墩、擴(kuò)展性等等組合...沒有完美的答案,只能在特定的環(huán)境下進(jìn)行取舍... 人生又何嘗不是在不斷尋找適合自己的算法耗拓,但是前提還是得給自己找到穩(wěn)定的參照物(限定條件)拇颅,尋尋覓覓,加油吧乔询,騷年
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末樟插,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竿刁,更是在濱河造成了極大的恐慌黄锤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件食拜,死亡現(xiàn)場離奇詭異鸵熟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)负甸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門流强,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惑惶,你說我怎么就攤上這事煮盼。” “怎么了带污?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長香到。 經(jīng)常有香客問我鱼冀,道長报破,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任千绪,我火速辦了婚禮充易,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荸型。我一直安慰自己盹靴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布瑞妇。 她就那樣靜靜地躺著稿静,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辕狰。 梳的紋絲不亂的頭發(fā)上改备,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機(jī)與錄音蔓倍,去河邊找鬼悬钳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛偶翅,可吹牛的內(nèi)容都是我干的默勾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼聚谁,長吁一口氣:“原來是場噩夢啊……” “哼母剥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垦巴,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤媳搪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后骤宣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秦爆,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年憔披,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了等限。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芬膝,死狀恐怖望门,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锰霜,我是刑警寧澤筹误,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站癣缅,受9級特大地震影響厨剪,放射性物質(zhì)發(fā)生泄漏哄酝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一祷膳、第九天 我趴在偏房一處隱蔽的房頂上張望陶衅。 院中可真熱鬧,春花似錦直晨、人聲如沸搀军。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罩句。三九已至,卻和暖如春儒士,著一層夾襖步出監(jiān)牢的瞬間的止,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工着撩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诅福,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓拖叙,卻偏偏與公主長得像氓润,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子薯鳍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容