JAVA代码
class Solution {
public int climbStairs(int n) {
int[] steps = new int[n+1];
if (n==1){
return steps[n]=1;
}
if (n==2){
return steps[n]=2;
}
else
steps[1]=1;
steps[2]=2;
for (int i=3;i<n+1;i++) {
steps[i] = steps[i - 1] + steps[i - 2];
}
return steps[n];
}
}
这个时间复杂度满分,空间复杂度负分
!!!!注意:用斐波那契公式能达到最低时间复杂度:
public class Solution {
public int climbStairs(int n) {
double sqrt5=Math.sqrt(5);
double fibn=Math.pow((1+sqrt5)/2,n+1)-Math.pow((1-sqrt5)/2,n+1);
return (int)(fibn/sqrt5);
}
}
Python3代码:
class Solution:
def climbStairs(self, n: int) -> int:
output = list(range(n+1))
if n==1:
output[1] =1
return output[n]
if n==2:
output[2] =2
return output[n]
else:
output[1] =1
output[2] =2
for i in range(3,n+1):
output[i] = output[i-1]+output[i-2]
return output[n]
几乎一摸一样的代码啊。太惨了…可能因为python用的人多?
优化一下python写法
class Solution:
def climbStairs(self, n: int) -> int:
if n <= 1:
return 1
dp = [0 for i in range(n+1)]
dp[0], dp[1] = 1, 1
for i in range(2, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
此处仅少写了一个判断,速度就变快了一倍?