有效的數(shù)獨(dú)

判斷一個(gè) 9x9 的數(shù)獨(dú)是否有效斜做。只需要根據(jù)以下規(guī)則箭启,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可知市。

  1. 數(shù)字 1-9 在每一行只能出現(xiàn)一次蟹瘾。
  2. 數(shù)字 1-9 在每一列只能出現(xiàn)一次芹务。
  3. 數(shù)字 1-9 在每一個(gè)以粗實(shí)線分隔的 3x3 宮內(nèi)只能出現(xiàn)一次择份。

數(shù)獨(dú)部分空格內(nèi)已填入了數(shù)字狸吞,空白格用 '.' 表示胆描。

思路:

每一行必須是數(shù)字1~9且不重復(fù)
每一列必須是數(shù)字1~9且不重復(fù)
每一個(gè)小九宮格(互不交叉炬灭,總共九個(gè)小九宮格)必須是數(shù)字1~9且不重復(fù)

依次檢查每行醋粟,每列,每個(gè)子九宮格是否出現(xiàn)重復(fù)元素重归,如果出現(xiàn)返回false米愿,否則返回true.

難點(diǎn)在于表示第i個(gè)九宮格每個(gè)格點(diǎn)的坐標(biāo)。

觀察行號(hào)規(guī)律:

第0個(gè)九宮格:000111222; 第1個(gè)九宮格:000111222; 第2個(gè)九宮格:000111222;
第3個(gè)九宮格:333444555; 第4個(gè)九宮格:333444555; 第5個(gè)九宮格:333444555;
第6個(gè)九宮格:666777888; 第7個(gè)九宮格:666777888; 第8個(gè)九宮格:666777888;

可見(jiàn)對(duì)于每三個(gè)九宮格行號(hào)增3鼻吮;對(duì)于單個(gè)九宮格育苟,每三個(gè)格點(diǎn)行號(hào)增1。

因此第i個(gè)九宮格的第j個(gè)格點(diǎn)的行號(hào)可表示為i/3*3+j/3(每個(gè)小九宮格j都是從0~9遞增)

觀察列號(hào)規(guī)律:

第0個(gè)九宮格:012012012; 第1個(gè)九宮格:345345345; 第2個(gè)九宮格:678678678;
第3個(gè)九宮格:012012012; 第4個(gè)九宮格:345345345; 第5個(gè)九宮格:678678678;
第6個(gè)九宮格:012012012; 第7個(gè)九宮格:345345345; 第8個(gè)九宮格:678678678;

可見(jiàn)對(duì)于下個(gè)九宮格列號(hào)增3椎木,循環(huán)周期為3违柏;對(duì)于單個(gè)九宮格博烂,每個(gè)格點(diǎn)行號(hào)增1,周期也為3漱竖。

周期的數(shù)學(xué)表示就是取模運(yùn)算mod禽篱。
因此第i個(gè)九宮格的第j個(gè)格點(diǎn)的列號(hào)可表示為i%3*3+j%3(每個(gè)小九宮格j都是從0~9遞增)

部分填充的有效數(shù)獨(dú),不需要填充

細(xì)節(jié)分析題:
(1)檢查行
(2)檢查列
(3)檢查9個(gè)子宮格

代碼實(shí)現(xiàn)

使用HashSet:
class Solution {
    public boolean isValidSudoku(char[][] board) {
        for (int i = 0; i < 9; i++) {
            Set<Character> row = new HashSet<Character>();
            Set<Character> col = new HashSet<Character>();
            Set<Character> cube = new HashSet<Character>();
            
            for (int j = 0; j < 9; j++) {
                // 檢查第i行闲孤,在橫坐標(biāo)位置  
                if (board[i][j] != '.' && !row.add(board[i][j])) {
                    return false;
                }
                
                // 檢查第i行谆级,在橫坐標(biāo)位置  
                if (board[j][i] != '.' && ! col.add(board[j][i])) {
                    return false;
                }
                
                // 行號(hào)+偏移量
                int rowIndex = 3 * (i / 3) + j / 3;
                // 列號(hào)+偏移量
                int colIndex = 3 * (i % 3) + j % 3;
                // 每個(gè)九宮格,共9個(gè)
                if (board[rowIndex][colIndex] != '.' && ! cube.add(board[rowIndex][colIndex])) {
                    return false;
                }
            }
            
        }
        
        return true;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讼积,一起剝皮案震驚了整個(gè)濱河市肥照,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勤众,老刑警劉巖舆绎,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異们颜,居然都是意外死亡吕朵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)窥突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)努溃,“玉大人,你說(shuō)我怎么就攤上這事阻问∥嗨埃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵称近,是天一觀的道長(zhǎng)第队。 經(jīng)常有香客問(wèn)我,道長(zhǎng)刨秆,這世上最難降的妖魔是什么凳谦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮衡未,結(jié)果婚禮上尸执,老公的妹妹穿的比我還像新娘。我一直安慰自己缓醋,他們只是感情好剔交,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著改衩,像睡著了一般岖常。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葫督,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天竭鞍,我揣著相機(jī)與錄音板惑,去河邊找鬼。 笑死偎快,一個(gè)胖子當(dāng)著我的面吹牛冯乘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晒夹,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼裆馒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丐怯?” 一聲冷哼從身側(cè)響起喷好,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎读跷,沒(méi)想到半個(gè)月后梗搅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡效览,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年无切,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丐枉。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哆键,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘦锹,到底是詐尸還是另有隱情籍嘹,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布沼本,位于F島的核電站噩峦,受9級(jí)特大地震影響锭沟,放射性物質(zhì)發(fā)生泄漏抽兆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一族淮、第九天 我趴在偏房一處隱蔽的房頂上張望辫红。 院中可真熱鬧,春花似錦祝辣、人聲如沸贴妻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)名惩。三九已至,卻和暖如春孕荠,著一層夾襖步出監(jiān)牢的瞬間娩鹉,已是汗流浹背攻谁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弯予,地道東北人戚宦。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锈嫩,于是被迫代替她去往敵國(guó)和親受楼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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

  • 判斷一個(gè) 9x9 的數(shù)獨(dú)是否有效呼寸。只需要根據(jù)以下規(guī)則艳汽,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可。 數(shù)字 1-9 在每一行只能...
    WindMajor閱讀 1,016評(píng)論 0 0
  • 題目:兩數(shù)之和 描述: 判斷一個(gè)數(shù)獨(dú)是否有效等舔,根據(jù):Sudoku Puzzles - The Rules骚灸。(數(shù)獨(dú)規(guī)...
    韋弦Zhy閱讀 980評(píng)論 0 3
  • 判斷一個(gè) 9x9 的數(shù)獨(dú)是否有效。只需要根據(jù)以下規(guī)則慌植,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可甚牲。 數(shù)字 1-9 在每一行只能...
    1f872d1e3817閱讀 1,796評(píng)論 0 0
  • LeetCode 的算法題 PHP解法記錄 判斷一個(gè) 9x9 的數(shù)獨(dú)是否有效。只需要根據(jù)以下規(guī)則蝶柿,驗(yàn)證已經(jīng)填入的數(shù)...
    織毛衣的手閱讀 1,113評(píng)論 0 2
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類(lèi)型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,345評(píng)論 0 2