【普通跳台阶:题目描述】
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
【思路】
动态规划,自底向上。前两项为,上1层=1,上2层=2;之后的关系更新关系: array[n]=array[n-1]+array[n-2],即到达当前层无非是两种,一是从n-1层跳1层,二是从n-2层跳2层。时间复杂度O(n) 【代码】
python:
class Solution:
def jumpFloor(self, number):
# write code here
dp=[1,2]
for i in range(2,number):
dp.append(dp[i-1]+dp[i-2])
return dp[number-1]
c++:
class Solution {
public:
int jumpFloor(int number) {
vector<int> array={1,2};
for(int i=2;i<number;i++){
array.push_back(array[i-1]+array[i-2]);
}
return array[number-1];
}
};
【变态跳台阶:题目描述】
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
【思路】
双层循环向array中添加数字,array=[1,2],更新方法为: array[n]=array[n-1]+...array[n-n]+1(1表示直接跳上n层)
时间复杂度O(n*n)
【代码】
c++:
class Solution {
public:
int jumpFloorII(int number) {
vector<int> array={1,2};
for(int i=2;i<number;i++){
int num=0;
for(int j=1;j<=i;j++){
num+=array[i-j];
}
array.push_back(num+1);
}
return array[number-1];
}
};
python:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
re=[1,2]
for i in range(2,number):
num=0
for j in range(1,i+1):
num+=re[i-j]
re.append(num+1)
return re[number-1]