首页 > 其他分享 >Leetcode 3235. 判断矩形的两个角落是否可达

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

时间:2024-11-08 15:31:48浏览次数:1  
标签:circles return 3235 int long xCorner yCorner 矩形 Leetcode

 1 class Solution {
 2 public:
 3     bool canReachCorner(int xCorner, int yCorner, vector<vector<int>>& circles) {
 4         vector<bool> visited(circles.size(), false);
 5 
 6         function<bool(int)> dfs = [&](int i) -> bool {
 7             int x1 = circles[i][0], y1 = circles[i][1], r1 = circles[i][2];
 8             if (circleIntersectsBottomRightOfRectangle(x1, y1, r1, xCorner, yCorner)) {
 9                 return true;
10             }
11             visited[i] = true;
12             for (int j = 0; j < circles.size(); ++j) {
13                 int x2 = circles[j][0], y2 = circles[j][1], r2 = circles[j][2];
14                 if (!visited[j] && circlesIntersectInRectangle(x1, y1, r1, x2, y2, r2, xCorner, yCorner) && dfs(j)) {
15                     return true;
16                 }
17             }
18             return false;
19         };
20 
21         for (int i = 0; i < circles.size(); ++i) {
22             int x = circles[i][0], y = circles[i][1], r = circles[i][2];
23             if (pointInCircle(0, 0, x, y, r) || pointInCircle(xCorner, yCorner, x, y, r)) {
24                 return false;
25             }
26             if (!visited[i] && circleIntersectsTopLeftOfRectangle(x, y, r, xCorner, yCorner) && dfs(i)) {
27                 return false;
28             }
29         }
30         return true;
31     }
32 
33     bool pointInCircle(long long px, long long py, long long x, long long y, long long r) {
34         return (x - px) * (x - px) + (y - py) * (y - py) <= (long long)r * r;
35     }
36 
37     bool circleIntersectsTopLeftOfRectangle(int x, int y, int r, int xCorner, int yCorner) {
38         return (abs(x) <= r && 0 <= y && y <= yCorner) ||
39             (0 <= x && x <= xCorner && abs(y - yCorner) <= r) ||
40             pointInCircle(x, y, 0, yCorner, r);
41     }
42 
43     bool circleIntersectsBottomRightOfRectangle(int x, int y, int r, int xCorner, int yCorner) {
44         return (abs(y) <= r && 0 <= x && x <= xCorner) ||
45             (0 <= y && y <= yCorner && abs(x - xCorner) <= r) ||
46             pointInCircle(x, y, xCorner, 0, r);
47     }
48 
49     bool circlesIntersectInRectangle(long long x1, long long y1, long long r1, long long x2, long long y2, long long r2, long long xCorner, long long yCorner) {
50         return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) <= (r1 + r2) * (r1 + r2) &&
51             x1 * r2 + x2 * r1 < (r1 + r2) * xCorner &&
52             y1 * r2 + y2 * r1 < (r1 + r2) * yCorner;
53     }
54 };

 

标签:circles,return,3235,int,long,xCorner,yCorner,矩形,Leetcode
From: https://www.cnblogs.com/greenofyu/p/18535199

相关文章

  • 代码随想录算法训练营第二十一天| leetcode669. 修剪二叉搜索树、leetcode108.将有序
    1leetcode669.修剪二叉搜索树题目链接:669.修剪二叉搜索树-力扣(LeetCode)文章链接:代码随想录视频链接:你修剪的方式不对,我来给你纠正一下!|LeetCode:669.修剪二叉搜索树_哔哩哔哩_bilibili思路:目前想的是分三种情况,第一种情况就是这个数删除左边全部,第二种删除右边的全部,第......
  • 力扣21 打卡16 判断矩形的两个角落是否可达
    思路:首先,检查矩形的起点和终点是否在任何一个圆的范围内,如果是则不存在合法路径。接着,判断每个圆是否与矩形的左上角边界或右下角边界相交。对于与左上边界相交的圆,使用深度优先搜索(DFS),查找是否存在一组相连的圆,最终能连接到右下边界。若找到这样的路径,则矩形被封锁,返回Fa......
  • 代码随想录算法训练营第二十天|leetcode235. 二叉搜索树的最近公共祖先、leetcode701.
    1leetcode235.二叉搜索树的最近公共祖先题目链接:235.二叉搜索树的最近公共祖先-力扣(LeetCode)文章链接:代码随想录视频链接:二叉搜索树找祖先就有点不一样了!|235.二叉搜索树的最近公共祖先_哔哩哔哩_bilibili思路:用之前一样的方法,哈哈哈哈哈,好处就是做出来了,但是我觉得需......
  • LeetCode 2544[交替数字和]
    题目链接LeetCode2544[交替数字和]详情实例提示题解思路依次求出各位数字,然后进行计算循环找出各位数字:(循环体如下)  将数字对10取余得到对应位数的数字,加入到容器numVec  数字除以10,得到新的数字,此数字是不包含已获取数字的位数循环退出的条件:数字等于0循环......
  • LeetCode 2535[数组元素和与数字和的绝对差值]
    题目链接LeetCode2535[数组元素和与数字和的绝对差值]详情实例提示题解思路遍历容器,依次求出数字和与元素和,然后求差值:通过getSun函数,求取元素的数字和 getSun函数的实现:  将其对10取余操作,获取的余数即为当前位的数字  然后再除以10,继续对其进行10的取......
  • LeetCode HOT 100 记录
    目录230.二叉搜索树中第K小的元素-力扣(LeetCode)199.二叉树的右视图-力扣(LeetCode)230.二叉搜索树中第K小的元素-力扣(LeetCode)相当于把二叉搜索树从小到大排序,而二叉搜索树有一个特点,就是顺序左子树<根节点<右子树,因此可以考虑使用中序遍历/***Definitionfo......
  • 代码随想录算法训练营第九天|LeetCode151.翻转字符串里的单词、卡码网:55.右旋转字符串
    前言打卡代码随想录算法训练营第49期第九天︿( ̄︶ ̄)︿首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。今日题目LeetCode151翻转字......
  • LeetCode 1137[第N个泰波那契数]
    题目链接LeetCode1137[第N个泰波那契数]详情实例实例1实例2提示题解思路一[递归]当n为0,1,2时,直接返回对应的值当n大于2时,开始用f(n+3)=f(n)+f(n+1)+f(n+2)来递归求值代码一[此代码在力扣会超出时间限制]classSolution{public:inttrib......
  • LeetCode LCR135[报数]
    题目链接LeetCodeLCR135[报数]详情实例题解思路通过pow函数对10进行幂运算,来获取报数范围然后循环遍历通过push_back方法将数字加入到容器内代码classSolution{public:vector<int>countNumbers(intcnt){vector<int>iRetVec;......
  • 【LeetCode】返回链表的中间结点、删除链表的倒数第 N 个结点
    主页:HABUO......