Problem
Given the radius and the position of the center of a circle, implement the function randPoint
which generates a uniform random point inside the circle.
Implement the Solution
class:
Solution(double radius, double x_center, double y_center)
initializes the object with the radius of the circleradius
and the position of the center(x_center, y_center)
.randPoint()
returns a random point inside the circle. A point on the circumference of the circle is considered to be in the circle. The answer is returned as an array[x, y]
.
Example 1:
Input
["Solution", "randPoint", "randPoint", "randPoint"]
[[1.0, 0.0, 0.0], [], [], []]
Output
[null, [-0.02493, -0.38077], [0.82314, 0.38945], [0.36572, 0.17248]]
Explanation
Solution solution = new Solution(1.0, 0.0, 0.0);
solution.randPoint(); // return [-0.02493, -0.38077]
solution.randPoint(); // return [0.82314, 0.38945]
solution.randPoint(); // return [0.36572, 0.17248]
Constraints:
0 < radius <= 10^8
-10^7 <= x_center, y_center <= 10^7
At most
3 * 10^4
calls will be made torandPoint
.
Solution (Java)
class Solution {
private final double radius;
private final double xCenter;
private final double yCenter;
private final Random random = new Random();
public Solution(double radius, double xCenter, double yCenter) {
this.radius = radius;
this.xCenter = xCenter;
this.yCenter = yCenter;
}
public double[] randPoint() {
double x = getCoordinate(xCenter);
double y = getCoordinate(yCenter);
while (getDistance(x, y) >= radius * radius) {
x = getCoordinate(xCenter);
y = getCoordinate(yCenter);
}
return new double[] {x, y};
}
private double getDistance(double x, double y) {
return (xCenter - x) * (xCenter - x) + (yCenter - y) * (yCenter - y);
}
private double getCoordinate(double center) {
return center - radius + random.nextDouble() * 2 * radius;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(radius, x_center, y_center);
* double[] param_1 = obj.randPoint();
*/
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).