爬楼梯方法数 (leetcode 70)
一:解题思路
这道题目是一道简单的动态规划题目。
第一种方法为递归法。Time:O(2^n),Space:O(n)
第二种方法利用一个数组:Time:O(n),Space:O(n)
第三种方法为迭代法。Time:O(n),Space:O(1)
二:完整代码示例 (C、C++、Java、Python)
方法一C:
int climbStairs(int n) { if (n == 1) return 1; if (n == 2) return 2; return climbStairs(n - 1) + climbStairs(n-2); }
方法二C:
int climbStairs(int n) { if (n == 1) return 1; if (n == 2) return 2; int i = 0; int* d = (int*)malloc(sizeof(int)*(n+1)); d[0] = 1; d[1] = 1; for (i = 2; i <= n; i++) { d[i] = d[i - 1] + d[i-2]; } return d[n]; }
方法三C:
int climbStairs(int n) { if (n == 0) return 1; if (n == 1) return 1; int i = 0; int first = 1; int second = 1; for (i = 2; i <= n; i++) { int cur = first + second; first = second; second = cur; } return second; }
方法一C++:
class Solution { public: int climbStairs(int n) { if (n == 0) return 1; if (n == 1) return 1; return climbStairs(n - 1) + climbStairs(n-2); } };
方法二C++:
class Solution { public: int climbStairs(int n) { if (n == 0) return 1; if (n == 1) return 1; vector<int> d(n+1,0); d[0] = 1; d[1] = 1; for (int i = 2; i <= n; i++) { d[i] = d[i - 1] + d[i-2]; } return d[n]; } };
方法三C++:
class Solution { public: int climbStairs(int n) { if (n == 0) return 1; if (n == 1) return 1; int first = 1; int second = 1; for (int i = 2; i <= n; i++) { int cur = first + second; first = second; second = cur; } return second; } };
方法一Java:
class Solution { public int climbStairs(int n) { if(n==0) return 1; if(n==1) return 1; return climbStairs(n-1)+climbStairs(n-2); } }
方法二Java:
class Solution { public int climbStairs(int n) { if(n==0) return 1; if(n==1) return 1; int[] d=new int[n+1]; d[0]=1; d[1]=1; for (int i=2;i<=n;i++){ d[i]=d[i-1]+d[i-2]; } return d[n]; } }
方法三Java:
class Solution { public int climbStairs(int n) { if (n==0) return 1; if (n==1) return 1; int first=1; int second=1; for (int i=2;i<=n;i++){ int cur=first+second; first=second; second=cur; } return second; } }
方法一Python:
class Solution: def climbStairs(self, n: int) -> int: if n==0 or n==1: return 1 return self.climbStairs(n-1)+self.climbStairs(n-2)
方法二Python:
class Solution: def climbStairs(self, n: int) -> int: if n==0 or n==1: return 1 d={} d[0]=1 d[1]=1 for i in range(2,n+1): d[i]=d[i-1]+d[i-2] return d[n]
方法三Python:
class Solution: def climbStairs(self, n: int) -> int: if n==0 or n==1: return 1 first=1 second=1 for i in range(2,n+1): cur=first+second first=second second=cur return second

浙公网安备 33010602011771号