统计圆内格点数目

简介: 🎈每天进行一道算法题目练习,今天的题目是“统计圆内格点数目”。

说在前面

🎈每天进行一道算法题目练习,今天的题目是“统计圆内格点数目”。

问题描述

给你一个二维整数数组 circles ,其中 circles[i] = [xi, yi, ri] 表示网格上圆心为 (xi, yi) 且半径为 ri 的第 i 个圆,返回出现在 至少一个 圆内的 格点数目 。

注意:

格点 是指整数坐标对应的点。
圆周上的点 也被视为出现在圆内的点。

示例 1:

输入:circles = [[2,2,1]]
输出:5
解释:
给定的圆如上图所示。
出现在圆内的格点为 (1, 2)、(2, 1)、(2, 2)、(2, 3) 和 (3, 2),在图中用绿色标识。
像 (1, 1) 和 (1, 3) 这样用红色标识的点,并未出现在圆内。
因此,出现在至少一个圆内的格点数目是 5 。

示例 2:

输入:circles = [[2,2,2],[3,4,1]]
输出:16
解释:
给定的圆如上图所示。
共有 16 个格点出现在至少一个圆内。
其中部分点的坐标是 (0, 2)、(2, 0)、(2, 4)、(3, 2) 和 (4, 4) 。

提示:

1 <= circles.length <= 200
circles[i].length == 3
1 <= xi, yi <= 100
1 <= ri <= min(xi, yi)

思路分析

读完题目之后,我们可以知道,题目会给出一个数组,其中包含了多个圆的信息,圆的表示方式为[圆心横坐标,圆心纵坐标,圆半径],现在是需要我们求出有多少个整数点对会落在圆中。

  • 圆的方程

首先我们应该先回忆一下圆的方程,(x-a)²+(y-b)²=r²所表示的曲线是以O(a,b)为圆心,以r为半径的圆,所以要判断坐标是否在圆中,我们只需要将坐标代入a,b,当(x-a)²+(y-b)²<=r²时这说明该坐标在圆上。

  • 遍历区域中所有的整数对

在提示中我们可以知道,圆心的坐标为1 <= xi, yi <= 100,而且半径的长度1 <= ri <= min(xi, yi),所以这个区域的范围应该是从0~100

AC代码

/**
 * @param {number[][]} circles
 * @return {number}
 */
var countLatticePoints = function (circles) {
    // 遍历坐标系中的所有点,根据圆的方程过滤出落在圆上面的点
    let res = 0;
    for (let i = 0; i <= 200; i++) {
        for (let j = 0; j <= 200; j++) {
            for (let k = 0; k < circles.length; k++) {
                let x = circles[k][0], y = circles[k][1], r = circles[k][2];
                // 圆心为(a,b) 半径为r的圆的方程为(x-a)²+(x-b)²=r²
                if ((i - x) * (i - x) + (j - y) * (j - y) <= r * r) {
                    res++;
                    break;
                }
            }
        }
    }
    return res;
};

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
6月前
|
算法 测试技术 C#
C++二分查找:统计点对的数目
C++二分查找:统计点对的数目
|
6月前
|
算法 Java C++
统计单词数
统计单词数
64 0
|
6月前
1679.K和数对的最大数目
1679.K和数对的最大数目
33 0
|
6月前
|
算法 前端开发 Serverless
1729. 求关注者的数量
1729. 求关注者的数量
40 0
|
6月前
|
Java 测试技术
统计满足条件的子集个数
统计满足条件的子集个数
41 0
|
Java
统计字符数量
统计字符数量
95 0
|
算法
求煤球的数量
求煤球的数量
73 0
|
C语言 C++
1684. 统计一致字符串的数目
给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。 请你返回 words 数组中 一致字符串 的数目。
96 0