解题思路
这是一个等比数列求和问题。关键点:
-
单个小球的路径:
- 下落: 米
- 反弹: 米
- 下落: 米
- 反弹: 米
- 下落: 米
- ...直到不再反弹
-
等比数列:
- 每次反弹高度是前一次的
- 每个高度都要算两次(上升和下降)
- 第一次下落只算一次
-
求和公式:
- 总距离 =
- =
- =
代码
class Balls {
public:
int calcDistance(int A, int B, int C, int D) {
return calcSingleBall(A) + calcSingleBall(B) +
calcSingleBall(C) + calcSingleBall(D);
}
private:
int calcSingleBall(int height) {
return height * 3;
}
};
import java.util.*;
public class Balls {
public int calcDistance(int A, int B, int C, int D) {
// write code here
return calcSingleBall(A) + calcSingleBall(B) +
calcSingleBall(C) + calcSingleBall(D);
}
private int calcSingleBall(int height) {
return height * 3;
}
}
# -*- coding:utf-8 -*-
class Balls:
def calcDistance(self, A, B, C, D):
return self.calcSingleBall(A) + self.calcSingleBall(B) + \
self.calcSingleBall(C) + self.calcSingleBall(D)
def calcSingleBall(self, height):
return height * 3
算法及复杂度
- 算法:数学公式
- 时间复杂度:,直接计算
- 空间复杂度:,只使用常数额外空间