力扣 419. 甲板上的战舰

题目描述:

给定一个二维的甲板, 请计算其中有多少艘战舰。 战舰用 'X'表示,空位用 '.'表示。 你需要遵守以下规则:
·给你一个有效的甲板,仅由战舰或者空位组成。
·战舰只能水平或者垂直放置。换句话说,战舰只能由 1xN (1 行, N 列)组成,或者 Nx1 (N 行, 1 列)组·成,其中N可以是任意大小。
·两艘战舰之间至少有一个水平或垂直的空位分隔 - 即没有相邻的战舰

解析:

同岛屿沉没问题
深度优先遍历(dfs)

Java:

public int countBattleships(char[][] board) {
        int result = 0;
        for(int row = 0; row < board.length; row++) {
            for(int col = 0; col < board[0].length; col++) {
                if(board[row][col] == 'X') {
                    result++;
                    dfs(board, row, col);
                }
            }
        }
        return result;
    }
    public void dfs(char[][] board,int row, int col) {
        if(row < 0 || row >= board.length || col < 0 || col >= board[0].length ||
        board[row][col] != 'X') {
            return;
        }
        board[row][col] = '.';
        dfs(board, row - 1, col);
        dfs(board, row + 1, col);
        dfs(board, row, col - 1);
        dfs(board, row, col + 1);
    }

JavaScript:

var countBattleships = function(board) {
    let result = 0;
    for(let row = 0; row < board.length; row++) {
        for(let col = 0; col < board[0].length; col++) {
            if(board[row][col] === "X") {
                result++;
                dfs(row, col);
            }
        }
    }
    function dfs(row, col) {
        if(row < 0 || row >= board.length || col < 0 || col >= board[0].length || 
        board[row][col] !== "X") {
            return;
        }
        board[row][col] = ".";
        dfs(row - 1, col);
        dfs(row + 1, col);
        dfs(row, col - 1);
        dfs(row, col + 1);
    }
    return result;
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务