LeetCode 70. 爬楼梯 C/C++/Python

简介: LeetCode 70. 爬楼梯 C/C++/Python

题目描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

C语言版

/*70_爬楼梯*/
/*动态规划  f(n)=f(n-1)+f(n-2)*/
int climbStairs(int n) {
  int i = 0;
  int ret[46];
  ret[0] = 1;
  ret[1] = 1;
  if (n > 1)
  {
    for (i = 2; i <= n; i++)
    {
      ret[i] = ret[i - 1] + ret[i - 2];
    }
  }
  return ret[n];
}
/*优化
因为在递推公式中,我们只需要f(n-1),f(n-2)来退出n对应的总类,n-2之前的数据无需保留
所以只用三个数来记录状态即可(滚动),不需用数组来记录所有值
*/
int climbStairs(int n) {
  int i = 0;
  int num1 = 0, num2 = 0, num3 = 1;
  for (i = 0; i < n; i++)
  {
    num1 = num2;
    num2 = num3;
    num3 = num1 + num2;
  }
  return num3;
}

C++版

//70_爬楼梯
class Solution {
public:
  int climbStairs(int n) {
    vector<int> ret;
    ret.push_back(1);
    ret.push_back(1);
    if (n > 1)
    {
      for (int i = 2; i <= n; i++)
      {
        ret.push_back(ret[i - 1] + ret[i - 2]);
      }
    }
    return ret[n];
  }
};
//优化
class Solution {
public:
  int climbStairs(int n) {
    int num1 = 0, num2 = 0, num3 = 1;
    for (int i = 0; i < n; i++)
    {
      num1 = num2;
      num2 = num3;
      num3 = num1 + num2;
    }
    return num3;
  }
};

Python版

class Solution:
    def climbStairs(self, n: int) -> int:
        f = list()
        f.append(1)
        f.append(1)
        if n < 2:
            return f[n]
        for i in range(2, n + 1):
            f.append(f[i - 1] + f[i - 2])
        return f[n]
#优化空间复杂度
class Solution:
    def climbStairs(self, n: int) -> int:
        num1, num2, num3 = 0, 0, 1
        for i in range(n):
            num1 = num2
            num2 = num3
            num3 = num1 + num2
        return num3


相关文章
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2
|
3月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
236 0
|
1月前
|
C++ Python
探索Python与C/C++混合编程的艺术
探索Python与C/C++混合编程的艺术
37 1
WK
|
2月前
|
机器学习/深度学习 Java 程序员
为什么Python比C++慢很多?
Python相较于C++较慢主要体现在:动态类型系统导致运行时需解析类型,增加开销;作为解释型语言,逐行转换字节码的过程延长了执行时间;自动内存管理和垃圾回收机制虽简化操作但也带来了额外负担;全局解释器锁(GIL)限制了多线程性能;尽管Python库方便灵活,但在性能上往往不及C++底层库。然而,Python在某些领域如数据分析、机器学习中,凭借其高级别抽象和简洁语法仍表现出色。选语言需依据具体应用场景和需求综合考量。
WK
74 1
|
3月前
|
Unix C语言 C++
Python调用C/C++
Python调用C/C++
25 2
|
3月前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
26 1
|
3月前
|
Python
【Leetcode刷题Python】LeetCode 478. 在圆内随机生成点
本文介绍了LeetCode 478题的解法,题目要求在给定圆的半径和圆心位置的情况下实现在圆内均匀随机生成点的功能,并提供了Python的实现代码。
30 1
|
3月前
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
32 0
【Leetcode刷题Python】73. 矩阵置零
|
3月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
64 0
WK
|
3月前
|
机器学习/深度学习 运维 Java
Python 相对于 C++ 有哪些明显的优势
C++是一种强大且高效的编程语言,被广泛应用在系统软件、游戏开发、嵌入式系统等多个领域。然而Python在某些方面展现出显著优势:Python语法简洁直观,易于学习与使用,提高了代码的可读性和团队协作效率;拥有丰富的第三方库和框架资源,能有效提升开发效率;具备良好的跨平台性,无需大量修改即可适应不同操作系统;
WK
53 0