最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

有效的數(shù)獨 (LeetCode)

2023-03-15 09:21 作者:原裝-_-老弟  | 我要投稿


請你判斷一個?9 x 9?的數(shù)獨是否有效。只需要?根據(jù)以下規(guī)則?,驗證已經(jīng)填入的數(shù)字是否有效即可。

  1. 數(shù)字?1-9?在每一行只能出現(xiàn)一次。

  2. 數(shù)字?1-9?在每一列只能出現(xiàn)一次。

  3. 數(shù)字?1-9?在每一個以粗實線分隔的?3x3?宮內(nèi)只能出現(xiàn)一次。(請參考示例圖)

注意:

  • 一個有效的數(shù)獨(部分已被填充)不一定是可解的。

  • 只需要根據(jù)以上規(guī)則,驗證已經(jīng)填入的數(shù)字是否有效即可。

  • 空白格用?'.'?表示。

解題代碼

????思路來源為題解區(qū)大佬,?最開始只能想到暴力法。然后一直在找取巧的思路,但是無果,只好去題解區(qū)逛逛,然后就發(fā)現(xiàn)了這個


大佬的提交

經(jīng)過大半天的借鑒,終于看懂了思路。


思路如下:

????首先聲明三個數(shù)組,長度為9,分別為:行,列,塊。即九行、九列、九個九宮格。之所以這么聲明巧的就是接下來的。

????題目要求,每行、每列、每個九宮格 都不能有重復數(shù)字。所以需要檢測每行每列每個九宮格。

????然后,int 類型 C# 中 有四個字節(jié),即 32 位,也就是 32 個 可為 01 。所以,可根據(jù)位運算,用其中九個位,看自己癖好,此處使用1~10(零位跳過)。

? ? 再回到邏輯中。接下來就是一個循環(huán)遍歷數(shù)獨中每個元素。

????進入for循環(huán)內(nèi)。先取橫縱坐標,記為 x,y。然后判斷是否為 “.”,即判斷是否未存入數(shù)字。然后就是轉(zhuǎn) char 為 數(shù)字,因為是 1~9 所以 byte 夠用(算法主打就是能省就?。?/p>

????接下來就是三個判斷,這也是關(guān)鍵。

????整體上來說就是判斷三個數(shù)組中是否已存入某一個數(shù)字,未存入就存入,已存入就返回false。

????以九宮格驗證為例:

????第一行 獲取此時九宮格的序號。

????第三行(二行為空行)

????此時 num 為 當前數(shù)獨內(nèi)數(shù)字,block[tt] 為此時九宮格的存儲狀態(tài),block [tt] >> num 為此數(shù)字向右移num位。

????舉例:如果此九宮格內(nèi)存存入過 1,5,7。 則此時 int 類型為 1010_0010 前的零省略.

此例右移 num 位,如果num為5,則此時 int 類型為0000_0101.

????然后對 1?進行 & (AND 運算)。AND運算同為1則為1,否則為0。此時舉例 int 類型變?yōu)?000_0001。然后跟 1 對比,相等,即 num?已經(jīng)存過。返回false。

????第四行 同理 先讓1 左移 num 位,然后做 | 運算(OR?為兩個數(shù)的同一位,有一個 1 就為 1 )。再存入此位置。


最后等循環(huán)結(jié)束,如果都沒事就返回 true。



自己的提交(借鑒思路)


有效的數(shù)獨 (LeetCode)的評論 (共 條)

分享到微博請遵守國家法律
皋兰县| 四平市| 沅江市| 施秉县| 江达县| 温州市| 南丹县| 师宗县| 宁乡县| 盈江县| 双鸭山市| 多伦县| 郁南县| 新兴县| 长春市| 珠海市| 广汉市| 广西| 宁明县| 大田县| 台北市| 柳林县| 徐水县| 德钦县| 濮阳市| 马龙县| 大同县| 桓仁| 海淀区| 静乐县| 宁武县| 临沂市| 绥芬河市| 曲沃县| 涞源县| 民县| 玛多县| 清水县| 上林县| 肇源县| 方城县|