返回
破晓学习 leetcode Hot100 之爬楼梯、斐波那契数列、两数之和,初学者必会算法指南
前端
2024-01-21 02:00:37
前言:算法入门之旅
算法是计算机科学的基础,学习算法可以帮助我们理解计算机如何解决问题,如何设计出更高效的程序。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
结语
爬楼梯、斐波那契数列和两数之和这三个算法题都是算法入门必学的经典题。掌握它们可以为后续的算法学习打下坚实的基础。希望大家能够通过本文的讲解,对这些算法题有更深入的理解。