public class Solution {
    /**
     * @param board: A list of lists of character
     * @param word: A string
     * @return: A boolean
     */
    int m = 0;
    int n = 0;

    int[] dx = {1,-1,0,0};
    int[] dy = {0,0,1,-1};
    public boolean exist(char[][] board, String word) {
        // write your code here

        if (board == null || board.length == 0)
            return false;
        if (word == null || word.length() == 0)
            return true;

        m = board.length;
        n = board[0].length;

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                boolean res = dfs(board, word, 0, i, j);
                if (res)
                    return true;

            }
        }

        return false;
    }

    public boolean dfs(char[][] board, String word, int index, int x, int y) {
        if (index == word.length()) {
            return true;
        }

        if (x < 0 || y < 0 || x >=m || y >= n || board[x][y] != word.charAt(index))
            return false;

        char temp = board[x][y];
        board[x][y] = '#';

        boolean res = false;
        for (int i = 0; i < 4; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            res = res || dfs(board, word, index + 1, nx, ny);
        }
        board[x][y] = temp;
        return res;

    }
}

Number of islands

public class Solution {
    /**
     * @param grid a boolean 2D matrix
     * @return an integer
     */

    int m = 0;
    int n = 0;
    public int numIslands(boolean[][] grid) {
        // Write your code here
        if (grid == null || grid.length == 0)
            return 0;

        m = grid.length;
        n = grid[0].length;

        if (n == 0)
            return 0;

        int res = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j]) {
                    res++;
                    dfs(grid, i, j);
                }
            }
        }
        return res;
    }

    public void dfs(boolean[][] grid, int x , int y) {
        if (x < 0 || y < 0 || x >= m || y >=n) {
            return;
        }

        if (grid[x][y]) {
            grid[x][y] = false;
            dfs(grid, x+1, y);
            dfs(grid, x-1, y);
            dfs(grid, x, y+1);
            dfs(grid, x, y-1);
        }
    }
}

Surrounded Regions

public class Solution {
    /**
     * @param board a 2D board containing 'X' and 'O'
     * @return void
     * // bfs  http://blog.csdn.net/ljiabin/article/details/41345055
     */
    int m = 0;
    int n = 0;
    public void surroundedRegions(char[][] board) {
        // Write your code here

        if (board == null || board.length == 0)
            return;

        m = board.length;
        n = board[0].length;

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                // act on all elements at the edges
                if (i == 0 || i == m-1 || j == 0 || j == n-1 ) {
                    if (board[i][j] == 'O')
                        dfs(board, i , j);
                }

            }
        }

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                 if (board[i][j] == 'O')
                    board[i][j] = 'X';
                if (board[i][j] == '#')
                    board[i][j] = 'O';  
            }
        }

    }


    public void dfs (char[][] board, int x, int y) {

        board[x][y] = '#';

        int[] dx = {1, -1, 0, 0};
        int[] dy = {0, 0, 1, -1};

        for (int i = 0; i < 4; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];

            if (nx >=0 && nx <m && ny >= 0 && ny < n && board[nx][ny] == 'O')
                dfs(board, nx, ny);
        }

    }
}

results matching ""

    No results matching ""