详细见:leetcode.com/problems/climbing-stairs
Java Solution: github
package leetcode;
/*
* You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps.
In how many distinct ways can you climb to the top?
*/
public class P070_ClimbingStairs {
public static void main(String[] args) {
System.out.println(new Solution().climbStairs(5));
}
/*
* 1 ms
* 4.24%
*/
static class Solution {
public int climbStairs(int n) {
int a = 1, b = 2, c = 2, d = 2;
if (n == 1)
return a;
if (n == 2)
return b;
while (c != n) {
d = a + b;
a = b;
b = d;
c ++;
}
return d;
}
}
}
C Solution: github
/*
url: leetcode.com/problems/climbing-stairs
AC 0ms 46.50%
*/
int climbStairs(int n) {
int* h, i = 0;
if (n < 3) return n;
h = (int*) malloc(sizeof(int) * n);
h[0] = 1;
h[1] = 2;
for (i = 2; i < n; i ++) {
h[i] = h[i-1] + h[i-2];
}
i = h[n-1];
free(h);
return i;
}
Python Solution: github
#coding=utf-8
'''
url: leetcode.com/problems/climbing-stairs
@author: zxwtry
@email: zxwtry@qq.com
@date: 2017年4月16日
@details: Solution: 39ms 67.67%
'''
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
if n < 3: return n
dp = [0] * (n+1)
dp[1] = 1
dp[2] = 2
for i in range(3, n+1):
dp[i] = dp[i-1]+dp[i-2]
return dp[n]
本文提供了使用Java、C及Python三种语言解决LeetCode上经典的爬楼梯问题的方法。主要思路为利用动态规划求解到达楼梯顶部的不同路径数量。通过递推公式计算,避免了重复计算,提高了算法效率。

487

被折叠的 条评论
为什么被折叠?



