返回

破晓学习 leetcode Hot100 之爬楼梯、斐波那契数列、两数之和,初学者必会算法指南

前端

前言:算法入门之旅

算法是计算机科学的基础,学习算法可以帮助我们理解计算机如何解决问题,如何设计出更高效的程序。leetcode 是一个著名的算法学习平台,提供了大量算法题供大家练习。本文将带领大家学习 leetcode Hot100 中的三个经典算法题:爬楼梯、斐波那契数列和两数之和。这些算法题都是算法入门必学的,掌握它们可以为后续的算法学习打下坚实的基础。

一、爬楼梯

题目
你正在爬楼梯,每次可以爬一级或两级。请问爬到第 n 级楼梯有多少种不同的方法?

思路发现:

  • 爬楼梯这道题,通过读题,发现它和初中高中的数学题里的规律推导题类似,要发现它的计算格式。
  • 当 n=1 时,f(n) = 1,因为只有一级楼梯,只有一种爬法。
  • 当 n=2 时,f(n) = 2,因为有两种爬法:一种是一步一步爬,另一种是直接跨两步爬上去。
  • 当 n=3 时,f(n) = 3,因为有三种爬法:一种是先爬一步,再爬两步;一种是先爬两步,再爬一步;还有一种是一步一步爬。
  • 当 n=4 时,f(n) = 5,因为有五种爬法:一种是一步一步爬;一种是先爬一步,再爬两步,再爬一步;一种是先爬两步,再爬一步,再爬一步;一种是先爬两步,再爬两步;还有一种是一步一步爬。

通过观察,我们可以发现,爬到第 n 级楼梯的方法数,等于爬到第 n-1 级楼梯的方法数加上爬到第 n-2 级楼梯的方法数。即:f(n) = f(n-1) + f(n-2)。

代码实现:

def climb_stairs(n):
    if n <= 2:
        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]

二、斐波那契数列

题目:
斐波那契数列是指这样一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144,......。求斐波那契数列的第 n 个数。

思路发现:

  • 斐波那契数列也是一道规律推导题,要发现它的递推关系。
  • 斐波那契数列的第 n 个数,等于斐波那契数列的第 n-1 个数加上斐波那契数列的第 n-2 个数。即:f(n) = f(n-1) + f(n-2)。

代码实现:

def fibonacci(n):
    if n <= 1:
        return n
    dp = [0] * (n + 1)
    dp[1] = 1
    dp[2] = 1
    for i in range(3, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    return dp[n]

三、两数之和

题目:
给定一个整数数组 nums 和一个目标值 target,请找出两个不同的整数,使得它们的和等于 target。

思路发现:

  • 这道题可以使用哈希表来解决。哈希表是一种数据结构,它可以将键值对存储起来,以便快速查找。
  • 将 nums 中的每个数字作为键,将它的下标作为值,存储到哈希表中。
  • 然后遍历 nums 中的每个数字,对于每个数字,从哈希表中查找 target-nums[i],如果找到了,就说明找到了两个数字,它们的和等于 target。

代码实现:

def two_sum(nums, target):
    hash_table = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in hash_table:
            return [hash_table[complement], i]
        else:
            hash_table[num] = i
    return None

结语

爬楼梯、斐波那契数列和两数之和这三个算法题都是算法入门必学的经典题。掌握它们可以为后续的算法学习打下坚实的基础。希望大家能够通过本文的讲解,对这些算法题有更深入的理解。