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 <= 108
-107 <= x_center, y_center <= 107
At most
3 * 104
calls will be made torandPoint
.
Solution
/**
* @param {number} radius
* @param {number} x_center
* @param {number} y_center
*/
var Solution = function(radius, x_center, y_center) {
this.radius = radius;
this.centerX = x_center;
this.centerY = y_center;
};
/**
* @return {number[]}
*/
Solution.prototype.randPoint = function() {
var radius = Math.sqrt(Math.random()) * this.radius;
var rand = Math.random();
var degree = Math.PI / 2 * (rand === 1 ? 0 : rand);
var x = Math.cos(degree) * radius;
var y = Math.sin(degree) * radius;
return [
this.centerX + (Math.random() > 0.5 ? 1 : -1) * x,
this.centerY + (Math.random() > 0.5 ? 1 : -1) * y,
];
};
/**
* Your Solution object will be instantiated and called as such:
* var obj = new Solution(radius, x_center, y_center)
* var param_1 = obj.randPoint()
*/
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(1).