iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 9
0
Software Development

LeetCode小試身手系列 第 9

【Day 9】#79 - Word Search

Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

Example:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]
Given word = "ABCCED", return true.
Given word = "SEE", return true.
Given word = "ABCB", return false.

解析

此題要求從二維陣列中判斷給定字串是否相連。

解法

class Solution {
	public boolean exist(char[][] board, String word) {
        if (board.length != 0 && board[0].length != 0)
            for (int i = 0; i < board.length; i ++)
                for (int j = 0; j < board[i].length; j ++)
                    if (backtracking(board, word, i, j, 0))
                        return true;
        return false;
    }
    
   private boolean backtracking(char[][] board, String word, int row, int col, int pos) {
        if (pos == word.length())
            return true;
        if (row < 0 || row >= board.length 
            || col < 0 || col >= board[row].length 
            || board[row][col] != word.charAt(pos))
            return false;
        board[row][col] ^= 256;
        boolean res = backtracking(board, word, row + 1, col, pos + 1)
                    || backtracking(board, word, row - 1, col, pos + 1)
                    || backtracking(board, word, row, col + 1, pos + 1)
                    || backtracking(board, word, row, col - 1, pos + 1);
        board[row][col] ^= 256;

        return res;
    }
}

備註


希望透過記錄解題的過程,可以對於資料結構及演算法等有更深一層的想法。
如有需訂正的地方歡迎告知,若有更好的解法也歡迎留言,謝謝。


上一篇
【Day 8】#136 - Single Number
下一篇
【Day 10】#78 - Subsets
系列文
LeetCode小試身手14

尚未有邦友留言

立即登入留言