当前位置: 首页 > news >正文

3235. 判断矩形的两个角落是否可达

力扣刷题记录

dfs 困难

3235. 判断矩形的两个角落是否可达

思路

这题还是不会写,直接看的题解,对题解写的做了笔记,在代码中

首先判断起点 终点是否在圆里面
然后判断圆是否与左或上相交,相交后 判断是否和 右或下 相交, 不相交 寻找其它的圆

代码
class Solution:def canReachCorner(self, xCorner: int, yCorner: int, circles: List[List[int]]) -> bool:def pointInCircle(px: int, py: int, x: int, y: int, r: int) -> bool:# 判断点是否在圆里面return (x - px) ** 2 + (y - py) ** 2 <= r ** 2def circleIntersectsTopLeftOfRectangle(x: int, y: int, r: int, xCorner: int, yCorner: int) -> bool:# 圆是否与左 或 上 边界相交return (abs(x) <= r and 0 <= y <= yCorner) or (0 <= x <= xCorner and abs(y - yCorner) <= r) or pointInCircle(x, y, 0, yCorner, r)def circleIntersectsBottomRightOfRectangle(x: int, y: int, r: int, xCorner: int, yCorner: int) -> bool:# 圆是否与右 或 下 边界相交return (abs(y) <= r and 0 <= x <= xCorner) or (0 <= y <= yCorner and abs(x - xCorner) <= r) or (pointInCircle(x, y, xCorner, 0, r))def circlesIntersectInRectangle(x1: int, y1: int, r1: int, x2: int, y2: int, r2: int, xCorner: int, yCorner: int) -> bool:# 两个圆 相交 且圆心之间的一点 位于矩形内部return (x1 - x2) ** 2 + (y1 - y2) ** 2 <= (r1 + r2) ** 2 and x1 * r2 + x2 * r1 < (r1 + r2) * xCorner and y1 * r2 + y2 * r1 < (r1 + r2) * yCornervisited = [False] * len(circles)def dfs(i: int) -> bool:x1, y1, r1 = circles[i]if circleIntersectsBottomRightOfRectangle(x1, y1, r1, xCorner, yCorner):# 当前圆 同时也与 右或者下相交 直接退出 返回无法取得即可return Truevisited[i] = Truefor j, (x2, y2, r2) in enumerate(circles):if (not visited[j]) and circlesIntersectInRectangle(x1, y1, r1, x2, y2, r2, xCorner, yCorner) and dfs(j):# 当前圆已经与左边界或者上边界相交了   继续判断其它圆是否与这个圆 j 相交在矩形里面   满足则继续dfs j 判断圆j是否与矩形 右 下 相交  满足 则说明形成了封闭的# 否则 继续判断其它的圆 一个一个遍历return Truereturn Falsefor i, (x, y, r) in enumerate(circles):if pointInCircle(0, 0, x, y, r) or pointInCircle(xCorner, yCorner, x, y, r):# 起点 终点 在圆里面return Falseif (not visited[i]) and circleIntersectsTopLeftOfRectangle(x, y, r, xCorner, yCorner) and dfs(i):# 不访问重复的圆  判断圆 i 是否与左 或 上 边界相交  然后dfs遍历其它的圆# 好像是 首先找到一个与左或者上相交的圆 如果找到 进入dfs 是否与 矩形 右下相交return Falsereturn True

时间复杂度:O(n^2)
空间复杂度:O(n)


http://www.mrgr.cn/news/68348.html

相关文章:

  • 新疆高校大数据实验室案例分享
  • 【论文阅读】Learning dynamic alignment via meta-filter for few-shot learning
  • LeetCode题练习与总结:赎金信--383
  • 遥控救生圈,水上应急救援的新革命_鼎跃安全
  • 零基础如何花最少的时间入门网络安全,往这看!
  • 神经网络基础--什么是神经网络?? 常用激活函数是什么???
  • 安装和卸载Mysql(压缩版)
  • Java——》try-with-resource
  • anaconda 安装笔记Ubuntu20
  • 强大又好用 这些AI工具让效率提升10倍
  • 【TS】九天学会TS语法——5.TypeScript的类
  • 气膜球幕:打造引人注目的展览新选择—轻空间
  • InsectaIntel 智能昆虫识别平台
  • 无人机影像处理系统技术选型
  • 【数据集】【YOLO】【目标检测】摔跤识别数据集 5097 张,YOLO行人摔倒识别算法实战训练教程!
  • node-sass下载报错解决方案
  • Java语法糖,你用过哪些?
  • 深入学习指针(5)!!!!!!!!!!!!!!!
  • Feign中的RequestInterceptor详解及配置
  • 万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
  • 智能指针中的循环引用具体解决流程
  • 数据去重和去噪技术
  • 易泊车牌识别相机:智能与精准的完美结合
  • Java反射、注解、泛型——针对实习面试
  • Spark 中的 RDD 分区的设定规则与高阶函数、Lambda 表达式详解
  • 吹爆!2024最详细的大模型学习路线已整理!手把手带你高效入门,大模型论文全打通!(大模型微调/大模型学习路线/大模型入门)