【leetcode】單詞搜索

【leetcode】單詞搜索

題目:

給定一個二維網(wǎng)格和一個單詞,找出該單詞是否存在于網(wǎng)格中声搁。

單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成僻焚,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格芹枷。同一個單元格內(nèi)的字母不允許被重復(fù)使用衅疙。

示例:

board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]

給定 word = "ABCCED", 返回 true
給定 word = "SEE", 返回 true
給定 word = "ABCB", 返回 false

提示:

board 和 word 中只包含大寫和小寫英文字母。
1 <= board.length <= 200
1 <= board[i].length <= 200
1 <= word.length <= 10^3

思路:

使用dfs+回溯法鸳慈,從每一個點出發(fā)進(jìn)行探索饱溢,看指定word是否出現(xiàn)。

有一個與board維度相同的viewed數(shù)組用于記錄探索路徑走芋,為true即為該位置是一個探索路徑绩郎。

必要的剪枝策略。

1翁逞、數(shù)組越界
2肋杖、該節(jié)點已經(jīng)訪問過
3、index位置的字符與字符串中的字符不符

java代碼:

class Solution {
   public boolean exist(char[][] board, String word) {
        int m = board.length;
        int n = board[0].length;
        boolean[][] viewed = new boolean[m][n];
 
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                boolean res = existDfs(board, word, viewed, i, j, 0);
                if (res) {
                    return true;
                }
            }
        }
        return false;
    }
 
    private boolean existDfs(char[][] board, String word, boolean[][] viewed, int row, int col, int index) {
        //index表示的是當(dāng)前探索的是第幾個詞 
        if (row < 0 || row >= board.length || col < 0 || col >= board[0].length ||
                viewed[row][col] || board[row][col] != word.charAt(index)) {
            return false;
        }
 
        index++;
        if (index == word.length()) {
            //word所有字符均匹配上
            return true;
        }
 
        viewed[row][col] = true;
        //注意index已經(jīng)++
        boolean right = existDfs(board, word, viewed, row + 1, col, index);
        boolean left = existDfs(board, word, viewed, row - 1, col, index);
        boolean up = existDfs(board, word, viewed, row, col - 1, index);
        boolean down = existDfs(board, word, viewed, row, col + 1, index);
        if(right||left||up||down) {
            return true;
        }else {
            viewed[row][col] = false;
            return false;
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熄攘,一起剝皮案震驚了整個濱河市兽愤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挪圾,老刑警劉巖浅萧,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哲思,居然都是意外死亡洼畅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門棚赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帝簇,“玉大人,你說我怎么就攤上這事靠益∩ル龋” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵胧后,是天一觀的道長芋浮。 經(jīng)常有香客問我,道長壳快,這世上最難降的妖魔是什么纸巷? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮眶痰,結(jié)果婚禮上瘤旨,老公的妹妹穿的比我還像新娘。我一直安慰自己竖伯,他們只是感情好存哲,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布因宇。 她就那樣靜靜地躺著,像睡著了一般祟偷。 火紅的嫁衣襯著肌膚如雪羽嫡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天肩袍,我揣著相機(jī)與錄音杭棵,去河邊找鬼。 笑死氛赐,一個胖子當(dāng)著我的面吹牛魂爪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艰管,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼滓侍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牲芋?” 一聲冷哼從身側(cè)響起撩笆,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缸浦,沒想到半個月后夕冲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裂逐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年歹鱼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卜高。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡弥姻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掺涛,到底是詐尸還是另有隱情庭敦,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布薪缆,位于F島的核電站秧廉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏矮燎。R本人自食惡果不足惜定血,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一赔癌、第九天 我趴在偏房一處隱蔽的房頂上張望诞外。 院中可真熱鬧,春花似錦灾票、人聲如沸峡谊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽既们。三九已至濒析,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啥纸,已是汗流浹背号杏。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留斯棒,地道東北人盾致。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像荣暮,于是被迫代替她去往敵國和親庭惜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355