LeetCode in Kotlin

478. Generate Random Point in a Circle

Medium

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:

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:

Solution

import java.util.Random

@Suppress("kotlin:S2245")
class Solution(private val radius: Double, private val xCenter: Double, private val yCenter: Double) {
    private val random: Random = Random()
    fun randPoint(): DoubleArray {
        var x = getCoordinate(xCenter)
        var y = getCoordinate(yCenter)
        while (getDistance(x, y) >= radius * radius) {
            x = getCoordinate(xCenter)
            y = getCoordinate(yCenter)
        }
        return doubleArrayOf(x, y)
    }

    private fun getDistance(x: Double, y: Double): Double {
        return (xCenter - x) * (xCenter - x) + (yCenter - y) * (yCenter - y)
    }

    private fun getCoordinate(center: Double): Double {
        return center - radius + random.nextDouble() * 2 * radius
    }
}

/*
 * Your Solution object will be instantiated and called as such:
 * var obj = Solution(radius, x_center, y_center)
 * var param_1 = obj.randPoint()
 */