通过万岁!!!
- 题目:就是给你一个圆心,一个半径,然后让你随机生成一个点,要求在这个圆内。
- 思路:我的思路是生成的时候判断一下是不是在园内即可,要是不在,则重新生成,但是我的代码超时了。有点莫名其妙。主要是我每次都随机生成两个点。
- 技巧:其实这个题,我没有领会到要考察什么,可能是代码的规范吧。比如我们可以创建一个成员的Random对象。这样就不用每次都创建,浪费空间。并且在while中,尽量两个重新生成,这样可能性大,而不是固定一个x,万一x是边缘,那么你的y很难找的。
class Solution {
double r, x, y;
Random random;
public Solution(double radius, double x_center, double y_center) {
r = radius;
x = x_center;
y = y_center;
random = new Random();
}
public double[] randPoint() {
double random_x = random.nextDouble() * 2 * r - r;
double random_y = random.nextDouble() * 2 * r - r;
double r2 = r * r;
while (random_x * random_x + random_y * random_y > r2) {
random_x = random.nextDouble() * 2 * r - r;
random_y = random.nextDouble() * 2 * r - r;
}
return new double[]{random_x + x, random_y + y};
}
}
- 总结:题目不是很难,但是代码中对象的创建是十分关键的。