首页 > 其他分享 >LeetCode 419. 甲板上的战舰(深度优先搜索dfs、数组)

LeetCode 419. 甲板上的战舰(深度优先搜索dfs、数组)

时间:2024-06-11 16:33:10浏览次数:26  
标签:return int dfs LeetCode board ans 战舰 419

419. 甲板上的战舰

在这里插入图片描述
在这里插入图片描述

思路:方法一,深度优先搜索dfs,遇到‘X’,就dfs一次,并在board中将其变为‘.’ 。

class Solution {
public:
    void dfs(int x,int y,vector<vector<char>>& board){
        if(board[x][y]!='X') return ;
        board[x][y]='.';
        if(x+1<board.size()) dfs(x+1,y,board);
        if(y+1<board[0].size()) dfs(x,y+1,board);
    }
    int countBattleships(vector<vector<char>>& board) {
        int ans=0;
        for(int i=0;i<board.size();i++){
            for(int j=0;j<board[i].size();j++){
                if(board[i][j]=='X'){
                    dfs(i,j,board);
                    ans++;
                }
            }
        }
        return ans;
    }
};

思路:方法二,进阶版,需要观察战舰的特点。如果遍历到战舰的头部,那么它的左边和上边都是没有‘X’的,如果是战舰的非头部部分,那么左边或上边会有‘X’,只需要找到这个特点,就可以统计出战舰的数量。

class Solution {
public:
    int countBattleships(vector<vector<char>>& board) {
        int ans=0;
        for(int i=0;i<board.size();i++){
            for(int j=0;j<board[i].size();j++){
                if(board[i][j]=='X'&&(i==0||board[i-1][j]!='X')&&(j==0||board[i][j-1]!='X')){
                    ans++;
                }
            }
        }
        return ans;
    }
};

标签:return,int,dfs,LeetCode,board,ans,战舰,419
From: https://blog.csdn.net/weixin_46028214/article/details/139602153

相关文章

  • Leetcode419 甲板上的战舰
    最近以来,我在力扣上坚持完成每天一题,今天系统推的题目为《甲板上的战舰》,在此记录一下。题目描述如下:给你一个大小为mxn的矩阵board表示甲板,其中,每个单元格可以是一艘战舰'X'或者是一个空位'.',返回在甲板board上放置的战舰的数量。战舰只能水平或者垂直放置在......
  • LeetCode 409 Longest Palindrome All In One
    LeetCode409LongestPalindromeAllInOneLeetCode409最长回文算法题解Solutions//MapfunctionlongestPalindrome(s:string):number{constmap=newMap();letlen=0;for(leti=0;i<s.length;i++){if(map.has(s[i])){//配对,消元......
  • LeetCode 算法:缺失的第一个正数c++
    原题链接......
  • Q25 LeetCode49 字母异位词分组
    难好好看看  1classSolution{2publicList<List<String>>groupAnagrams(String[]strs){3if(strs==null||strs.length==0)4returnnewArrayList<>();5//map中key存储的是字符串中字母排序后新的字符串6Map<Stri......
  • 第一篇 LeetCode(42)接雨水
    LeetCode(42)接雨水力扣官网题目描述:给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水......
  • LeetCode 974 Subarray Sums Divisible by K All In One
    LeetCode974SubarraySumsDivisiblebyKAllInOneLeetCode974能被K整除的子数组之和errosfunctionsubarraysDivByK(nums:number[],k:number):number{//-5/0/5letcount:number=0;//单个元素for(leti=0;i<nums.length;i++){......
  • Q24 LeetCode383 赎金信
    同Q23只需要先将随机字符串挨个存入hashmap中,然后循环遍历给定字符串,只要最后hashmap中size为0,即可返回true 1classSolution{2publicbooleancanConstruct(StringransomNote,Stringmagazine){34HashMap<Character,Integer>smap=newH......
  • Q23 LeetCode242 字母异位词
    1.先进行简单的字符长度判断,不相等直接返回false;2.containsKey()的使用3.在减减循环14-17行里判别key的value是否为0,要不然会报错 1classSolution{2publicbooleanisAnagram(Strings,Stringt){3if(s.length()!=t.length()){4return......
  • 每日一题(LeetCode·704)二分查找
    题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例 2:输入:num......
  • 每日一题(LeetCode 34题,在排序数组中查找元素的第一个和最后一个元素)
    题目:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题示例1:输入:nums=[5,7,7,8,8,10],......