该题与斐波那契数列如出一辙,当前状态只与前两个状态有关,且为前两者之和。利用两个变量保存前两个状态来代替dp数组,可节省空间。 要跳上第n级台阶,要么从第n-1级台阶跳上去,要么从第n-2级台阶跳上去。故而,跳上第n级台阶的可选方案数目,为跳上第n-1级台阶的方案数目和跳上第n-2级台阶的之和。
class Solution { public: int jumpFloor(int number) { if (number == 1) return 1; if (number == 2) return 2; int dp1 = 1; int dp2 = 2, dpn = 2; for (int i = 3; i <= number; i++) { dpn = dp1 + dp2; dp1 = dp2; dp2 = dpn; } return dpn; } };