2249. 统计圆内格点数目(技巧)

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

注意:

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


2249. 统计圆内格点数目(技巧)_第1张图片

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

2249. 统计圆内格点数目(技巧)_第2张图片

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

【思路】:
利用公式:(x-a)²+(y-b)²<=r²。直接穷举即可。


【代码】:
利用set去重

/**
 * @param {number[][]} circles
 * @return {number}
 */
var countLatticePoints = function(circles) {
    let set = new Set();
    for(let i =0 ;i < circles.length;i++){
        let a = circles[i][0];
        let b = circles[i][1];
        let r = circles[i][2];
        for(let x = a - r;x <= r+a;x++){
            for(let y = b - r;y <= b + r;y++){
                let val1 = (x-a)*(x-a);
                let val2 = (y-b)*(y-b);
                if(val1 + val2 <= r*r){
                    set.add(x+"#"+y);
                }
            }
        }
    } 
    return set.size;
};

你可能感兴趣的:(LeetCode,小技巧,javascript,算法)