130. 被围绕的区域

这篇具有很好参考价值的文章主要介绍了130. 被围绕的区域。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原题链接:

130. 被围绕的区域
https://leetcode.cn/problems/surrounded-regions/

完成情况:

130. 被围绕的区域,# LeetCode题解,深度优先,算法,leetcode

解题思路:

1.很常规的就是走格子,dfs+四个方向+判断条件

130. 被围绕的区域,# LeetCode题解,深度优先,算法,leetcode

2.就是思考,怎么去判断?

那就是边上的永远不会被包裹,所以我们就先检查边上的能覆盖的范围,最后再检查一遍得出结果
130. 被围绕的区域,# LeetCode题解,深度优先,算法,leetcode

然后就是小细节,一个点不能检查两遍

130. 被围绕的区域,# LeetCode题解,深度优先,算法,leetcode
因为后面的dfs里的判断

	if (x<0||x>=n_col||y<0||y>=m_row||board[x][y] != 'O'){
			return;
		}
		//如果当前点在区域里面,且等于0
		board[x][y] = 'A';  //如果等于0,那么就做个标记

重复检查的话,就会被return掉。

最后挺无语的= =~

130. 被围绕的区域,# LeetCode题解,深度优先,算法,leetcode
是字母‘O’欧,不是0,害我检查了20多分钟= =~文章来源地址https://www.toymoban.com/news/detail-577745.html

参考代码:

package 西湖算法题解___中等题;

public class __130被围绕的区域 {
	public static void main(String[] args) {

	}

	private int n_col,m_row;
	public void solve(char[][] board) {
		n_col = board.length;
		m_row = board[0].length;
		if (n_col==0 || m_row==0){
			return;
		}
		//--------------------------------------------------------
		//只要边上有元素,那么就一定不会被包围,我们就要去检查一下边上的关联了多少个 'X'
		for (int i=0;i<n_col;i++){
			dfs(board,i,0);
			dfs(board,i,m_row-1);
		}
		for (int i=1;i<m_row-1;i++){
			dfs(board,0,i);
			dfs(board,n_col-1,i);
		}

		//--------------------------------------------------------
		//再全部重新遍历里面的情况
		for (int i=0;i<n_col;i++){
			for (int j=0;j<m_row;j++){
				if (board[i][j] == 'A'){
					//说明当前位置是0,且不会被包裹
					board[i][j] = 'O';
				} else if (board[i][j] == 'O'){
					//说明这些是中间被包裹了的0,要被转化成   'X'
					board[i][j] = 'X';
				}
			}
		}
	}

	/**
	 *
	 * @param board
	 * @param x
	 * @param y
	 */
	private void dfs(char[][] board, int x, int y) {
		if (x<0||x>=n_col||y<0||y>=m_row||board[x][y] != 'O'){
			return;
		}
		//如果当前点在区域里面,且等于0
		board[x][y] = 'A';  //如果等于0,那么就做个标记
		//往四个方向去遍历
		dfs(board,x+1,y);
		dfs(board,x-1,y);
		dfs(board,x,y+1);
		dfs(board,x,y-1);
	}
}

到了这里,关于130. 被围绕的区域的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录| 图论02●695岛屿最大面积 ●1020飞地的数量 ●130被围绕的区域 ●417太平洋大西洋水流问题

    #695岛屿最大面积 模板题,很快.以下两种dfs,区别是看第一个点放不放到dfs函数中处理,那么初始化的area一个是1一个是0  bfs:对应也有两种 #1020飞地的数量 下面是自己写的dfs,过了但是很多可以改进。bfs也差不多这里就不写了  可改进的点: 1 其实遍历四周可以四个循环合

    2024年02月16日
    浏览(46)
  • 【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 111 二叉树的最小深度 Leetcode 110 平衡二叉树

    二叉树节点的深度: 指从根节点到该节点的最长简单路径边的条数或者节点数 (取决于深度从0开始还是从1开始) 二叉树节点的高度: 指从该节点到叶子节点的最长简单路径边的条数后者节点数 (取决于高度从0开始还是从1开始) 【前序求的是深度,后序求的是高度】 -

    2024年02月19日
    浏览(52)
  • LeetCode-200. 岛屿数量【深度优先搜索 广度优先搜索 并查集 数组 矩阵】

    给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1: 输入:grid = [ [“1”,“1”,“1”,“

    2024年04月14日
    浏览(39)
  • 每天一道leetcode:797. 所有可能的路径(图论&中等&深度优先遍历)

    给你一个有 n 个节点的 有向无环图(DAG) ,请你找出所有从节点 0 到节点 n-1 的路径并输出( 不要求按特定顺序 ) graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j] 存在一条有向边)。 n == graph.length 2 = n = 15 0 = graph[i][j] n graph[i][j] != i (即不存

    2024年02月12日
    浏览(63)
  • ※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径

    ---------------🎈🎈257. 二叉树的所有路径 题目链接🎈🎈------------------- 时间复杂度O(N) 空间复杂度O(N) 深度优先遍历 添加了 StringBulider 替代字符串拼接提升效率 toString() 转化为String .append() 添加元素 时间复杂度O(N) 空间复杂度O(N)

    2024年02月20日
    浏览(37)
  • FloodFill算法——力扣被围绕的区域

    被围绕的区域 我们来解读一下这个题目,这个题目的意思就是求出被X围绕的O有多少个,那么什么是被围绕呢?也就是没有出路并且连通的O不能到四条边上,这就算是被围绕了,可是即使知道了这些信息我们依旧头大因为,太难分析了我们遇到一个O之后还得去看看这一块儿

    2024年03月25日
    浏览(38)
  • 【LeetCode算法系列题解】第36~40题

    【题目描述】 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次(请参考示例图)。 注意: 一个有效

    2024年02月10日
    浏览(47)
  • 【LeetCode算法系列题解】第61~65题

    【题目描述】 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 【示例1】 【示例2】 【提示】 链表中节点的数目在范围 [0, 500] 内 − 100 ≤ N o d e . v a l ≤ 100 -100le Node.valle 100 − 100 ≤ N o d e . v a l ≤ 100 0 ≤ k ≤ 2 ∗ 1 0 9 0le kle 2 * 10^9 0 ≤ k ≤

    2024年02月09日
    浏览(34)
  • 【LeetCode算法系列题解】第46~50题

    【题目描述】 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以按 任意顺序 返回答案。 【示例1】 【示例2】 【示例3】 【提示】 1 ≤ n u m s . l e n g t h ≤ 6 1le nums.lengthle 6 1 ≤ n u m s . l e n g t h ≤ 6 − 10 ≤ n u m s [ i ] ≤ 10 -10le nums[i]le 10 − 10 ≤ n u

    2024年02月10日
    浏览(35)
  • 【LeetCode算法系列题解】第26~30题

    【题目描述】 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包