力扣 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;
};
全部评论

相关推荐

2025-12-29 20:37
已编辑
清华大学附属小学 Java
哇哇的菜鸡oc:1.为什么要写这么多内容呀 2.什么叫做简历 3.什么样的内容可以写到简历上 4.项目可以包装,但是要有理有据呀,不能乱包装呀,比如 跨境能达到日均120万订单的在国内都是能叫的上名字的,而且这些工作也基本上不太会交给一个实习生去做 建议友友可以去网上或者找同学的简历看看,他们的简历是怎么写的,去找找上面的那四个问题的答案吧,然后要记住的是Java是服务于业务的,而不是服务于微服务或者技术的
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务