当前位置: 首页 > article >正文

斐波那契数(力扣LeetCode)动态规划

斐波那契数(力扣LeetCode)动态规划

题目描述

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n)
示例 1:
输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:
输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:
输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3
提示:
0 <= n <= 30

动规五部曲:

这⾥我们要⽤⼀个⼀维dp数组来保存递归的结果

  1. 确定dp数组以及下标的含义
    dp[i]的定义为:第i个数的斐波那契数值是dp[i]
  2. 确定递推公式
    为什么这是⼀道⾮常简单的⼊⻔题⽬呢?
    因为题⽬已经把递推公式直接给我们了:状态转移⽅程 dp[i] = dp[i - 1] + dp[i - 2];
  3. dp数组如何初始化
    题⽬中把如何初始化也直接给我们了,如下:
  4. 确定遍历顺序
dp[0] = 0;
dp[1] = 1;

从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序⼀定是从前到后遍历的
5. 举例推导dp数组
按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导⼀下,当N为10的时候,dp数组应该是如下的数列:
0 1 1 2 3 5 8 13 21 34 55
如果代码写出来,发现结果不对,就把dp数组打印出来看看和我们推导的数列是不是⼀致的。

代码

力扣提交代码

class Solution {
public:
    int fib(int N) {
        if (N <= 1) return N;
        vector<int> dp(N + 1);
        dp[0] = 0;
        dp[1] = 1;
        for (int i = 2; i <= N; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[N];
    }
};

总代码

#include<bits/stdc++.h>
using namespace std;

int fib(int n)
{
	if(n<=1)
		return n;
	int f[31];
	f[0]=0;
	f[1]=1;
	for(int i=2;i<=n;i++)
	{
		f[i]=f[i-1]+f[i-2];
	}
	return f[n];
}

int main()
{
	int n;
	scanf("n = %d",&n);
	printf("%d",fib(n));
	return 0;
} 

http://www.kler.cn/a/145358.html

相关文章:

  • 为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1
  • zyNo.19
  • 网关登录校验
  • 《一文读懂!Q-learning状态-动作值函数的直观理解》
  • Windows11无法打开Windows安全中心主界面
  • 计算机网络 IP 网络层 2 (重置版)
  • 超声波雪深传感器冬季里的科技魔法
  • 3、Qt使用windeploy工具打包可执行文件
  • 复数及其代数运算
  • itop4412移植lrzsz工具踩坑笔记
  • 【Java】实现一个自己的定时器
  • Ansible的错误处理
  • JVM虚拟机:G1垃圾回收器的日志分析
  • C++中声明友元
  • 90. 打家劫舍II (房子围成一圈)
  • 【理解ARM架构】操作寄存器实现UART | 段的概念 | IDE背后的命令
  • linux shell操作 - 05 进程 与 IO 模型
  • vue--The template root requires exactly one element.的解决办法
  • RT-DETR 更换损失函数之 SIoU / EIoU / WIoU / Focal_xIoU
  • 【LeetCode】挑战100天 Day17(热题+面试经典150题)
  • 第四题-abb 【第六届传智杯程序设计挑战赛解题分析详解复盘】(JavaPythonC++实现)
  • 【数据结构实验】排序(一)冒泡排序改进算法 Bubble及其性能分析
  • 数据结构-归并排序+计数排序
  • leetcode中“辅助栈”类题目和“单调栈”类题目的异同
  • Redis当中的BitMap,实现github打卡功能
  • 嵌入式设备摄像头基础知识