【动态规划】斐波那契数列模型
目录
动态规划
动态规划的基本步骤
1137. 第 N 个泰波那契数 - 力扣(LeetCode)
算法分析
算法代码
算法代码
面试题 08.01. 三步问题 - 力扣(LeetCode)
算法分析
算法代码
优化
746. 使用最小花费爬楼梯 - 力扣(LeetCode)
算法分析
编辑
算法代码
解法二
解法三
算法代码
91. 解码方法
算法分析
算法代码
细节处理
算法代码
动态规划
动态规划(DP)是一种解决复杂问题的算法思想,将问题分解成更小的子问题,并通过这些子问题来解决问题。
动态规划的基本步骤
- 确定dp表及dp表中元素的含义;
- 确定状态转移方程;
- 初始化dp表;
- 确定填表顺序;
- 返回结果
在dp中,基本上都是根据这5步来做的。在动态规划中,有一些经典的题目,例如:斐波那契数列、最长公共子序列、背包问题、最短路径问题等。
本篇主要讲有关斐波那契相关的题目。
1137. 第 N 个泰波那契数 - 力扣(LeetCode)
算法分析
这道题要求第n个泰波那契数,可能你想想到用递归的方法,但这道题用递归来进行会超时。我们用动态规划的方法来解决。看图:
算法代码
/*** 计算泰波那契数列中的第n个数* 泰波那契数列是这样的:0, 1, 1, 2, 4, 7, 13, ...,从第四个数开始,每个数都是前三个数的和* 使用动态规划的方法来解决这个问题,避免了重复计算,提高了效率** @param n 想要计算的泰波那契数列的位置,n >= 0* @return 返回泰波那契数列中第n个数的值*/public int tribonacci(int n) {// 处理初始情况,当n为0时返回0,当n为1或2时返回1if (n <= 2) {return n == 0 ? 0 : 1;}// 创建一个数组,用来保存前n个泰波那契数int[] dp = new int[n + 1];// 初始化数组的前三个值,这是泰波那契数列的起始值dp[0]=0;dp[1]=1;dp[2]=1;// 从第三个数开始遍历,计算泰波那契数列的值for(int i=3;i<=n;i++){// 当前位置的值是前三个位置值的和dp[i]=dp[i-1]+dp[i-2]+dp[i-3];}// 返回第n个泰波那契数的值return dp[n];}
时间复杂度为O(n),空间复杂度为O(n)。
思考:这道题能不能进行优化?
显然是可以,这里我们可以用 滚动数组 的办法来对算法进行优化。
我们可以看到,想要求 dp[i] 那么我们只需要知道dp[i-1]、dp[i-2]、dp[i-3]这三个值,那么我们就可以用三个变量a、b、c来对这三个dp值进行存储,额外借助一个变量d来存储这三个变量值之和。
步骤为:
d=a+b+c;a=b;b=c;c=d;
算法代码
/*** 计算n阶特里波那契数列的值* 特里波那契数列是这样一个数列:0, 1, 1, 2, 4, 7, 13, 24, ...* 从第四个数开始,每个数都是前三个数的和* 优化使用迭代方法计算,避免了递归方法的性能问题* * @param n 指定的阶数,n是一个非负整数* @return 返回n阶特里波那契数列的值*/public int tribonacci(int n) {// 处理特里波那契数列的前三个特殊值if(n<=2) return n==0?0:1;// 初始化特里波那契数列的前三个值int a=0,b=1,c=1;// 用于临时存储计算结果的变量int d=0;// 通过迭代计算n阶特里波那契数列的值for(int i=3;i<=n;i++){// 当前项是前三项之和d=a+b+c;// 更新前三个值,为下一次迭代做准备a=b;b=c;c=d;}// 返回n阶特里波那契数列的值return d;}
面试题 08.01. 三步问题 - 力扣(LeetCode)
算法分析
这道题和上面那道题的做法类似。
这里有些细节需要处理:
dp数组需要是long类型,有些数据值超过了int的最大值;
每次dp[i]计算的时候都需要模1000000007。
算法代码
/*** 计算到达第n阶的方法数* 本函数解决的问题是,给定一个整数n,表示楼梯的阶数,求到达第n阶有多少种不同的走法* 规则是每次可以移动1阶、2阶或3阶* * @param n 楼梯的总阶数,n>0* @return 到达第n阶的方法数*/
public int waysToStep(int n) {// 对于前两阶,直接返回阶数本身,因为只有1阶和2阶时,方法数分别是1和2if(n<=2) return n;// 定义模数,用于结果的模运算,以防止计算过程中的整数溢出int MOD = 1000000007;// 创建一个数组用于存储到达每一阶的方法数long[] dp = new long[n + 1];// 初始化已知的到达前三阶的方法数dp[1] = 1;dp[2]= 2;dp[3] = 4;// 从第四阶开始,每一阶的方法数是到达前三阶方法数之和for (int i = 4; i <= n; i++) {dp[i] = (dp[i - 1] + dp[i - 2] + dp[i - 3]) % MOD;}// 返回到达第n阶的方法数return (int) dp[n];
}
时间复杂度为O(n),空间复杂度为O(n)
优化
跟上一道题一样,可以用几个变量来存储值。
/*** 计算到达第n个台阶有多少种走法* 使用动态规划思想,优化空间复杂度* * @param n 第n个台阶* @return 到达第n个台阶的走法数*/public int waysToStep1(int n) {// 如果n小于等于2,直接返回n,因为只有一步和两步时,走法分别是1种和2种if (n <= 2) return n;// 定义模数,用于取模运算,防止结果溢出int MOD = 1000000007;// a、b、c分别代表到达当前台阶前三个台阶的走法数long a = 1;long b = 2;long c = 4;// d用于临时存储当前台阶的走法数long d = 0;// 从第四个台阶开始遍历,计算每个台阶的走法数for (int i = 4; i <= n; i++) {// 当前台阶的走法数是前三个台阶走法数之和d = (a + b + c) % MOD;// 更新a、b、c为下一轮循环做准备a = b;b = c;c = d;}// 返回最后一个台阶的走法数return (int) c;}
746. 使用最小花费爬楼梯 - 力扣(LeetCode)
算法分析
算法代码
/*** 计算最小成本爬楼梯* 给定一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬所需要的体力值* 可以选择从楼梯的第 0 或 1 个台阶开始爬,一旦开始爬,就不能走回头路* 目标是到达楼梯的顶部,楼梯的顶部位于楼梯的末端之后(即数组之外)* 此函数使用动态规划的方法计算到达楼梯顶部所需的最小体力值* * @param cost 从每个台阶向上爬所需的体力值数组* @return 返回到达楼梯顶部所需的最小体力值*/public int minCostClimbingStairs(int[] cost) {// 楼梯的总数int n = cost.length;// dp[i] 表示到达第 i 个台阶所需的最小体力值int[] dp = new int[n+1];// 从第2个台阶开始计算,因为可以从第0或第1个台阶开始爬for(int i=2;i<=n;i++){// 到达当前台阶的最小体力值是从前两个台阶中选择一个,加上当前台阶的成本dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);}// 返回到达楼梯顶部所需的最小体力值return dp[n];}
时间复杂度O(n),空间复杂度O(n)
解法二
依旧是利用滚动数组的方法,来对空间进行优化。
/*** 使用动态规划求解最小成本爬楼梯问题** @param cost 每个阶梯的成本数组* @return 返回到达楼梯顶部的最小成本*/public int minCostClimbingStairs(int[] cost) {// 运用动态规划求解// 状态转移方程为:dp[i] = Math.min(dp[i-1], dp[i-2]) + cost[i]int n = cost.length;// 动态规划数组,只需要两个变量来存储前两个阶梯的最小成本int[] dp = new int[2];dp[0] = cost[0];dp[1] = cost[1];for (int i = 2; i < n; i++) {// 计算到达当前阶梯的最小成本int tmp = Math.min(dp[1], dp[0]) + cost[i];// 更新前两个阶梯的最小成本dp[0] = dp[1];dp[1] = tmp;}// 返回最后一个阶梯或倒数第二个阶梯的最小成本中的较小值return Math.min(dp[0], dp[1]);}
解法三
算法代码
public int minCostClimbingStairs2(int[] cost) {int n = cost.length;int[] dp = new int[n];dp[n- 1]=cost[n-1];dp[n-2]=cost[n-2];for(int i=n-3;i>=0;i--){dp[i]=Math.min(dp[i+1],dp[i+2])+cost[i];}return Math.min(dp[0],dp[1]);}
91. 解码方法
算法分析
这道题相对于前面几道来说,它的状态转移方程要难想一些。
算法代码
/*** 计算一个数字字符串的解码方法数* 解码规则为:数字表示字母,如 "1" 表示 "A","2" 表示 "B",以此类推,直到 "26" 表示 "Z"* * @param ss 待解码的数字字符串* @return 返回解码方法的总数*/
public int numDecodings(String ss) {int n = ss.length();char[] s = ss.toCharArray();int[] dp = new int[n];// 初始化第一个字符的解码方法数,如果第一个字符不是'0',则有一种解码方法if (s[0] != '0') dp[0] = 1;// 如果字符串只有一个字符,直接返回结果if (n == 1) return dp[0];// 初始化第二个字符的解码方法数,如果前两个字符都不是'0',则可以各自解码,算一种解码方法if (s[0] != '0' && s[1] != '0') dp[1] += 1;// 将前两个字符组合成一个数字,检查是否在10到26的范围内,如果是,则可以作为一个整体解码,算另一种解码方法int num = (s[0] - '0') * 10 + s[1] - '0';if (num >= 10 && num <= 26) dp[1] += 1;// 从第三个字符开始遍历,更新每个字符对应的解码方法数for (int i = 2; i < n; i++) {// 如果当前字符不是'0',则当前字符可以单独解码,解码方法数等于前一个字符的解码方法数if (s[i] != '0') {dp[i] += dp[i - 1];}// 将当前字符与前一个字符组合成一个数字,检查是否在10到26的范围内num = (s[i - 1] - '0') * 10 + s[i] - '0';if (num >= 10 && num <= 26) {// 如果在范围内,则当前字符可以与前一个字符组合解码,解码方法数增加前两个字符的解码方法数dp[i] += dp[i - 2];}}// 返回整个字符串的解码方法数return dp[n - 1];
}
细节处理
我们可以看到,其实dp[1]的初始化,跟填表的时候相似,我们可以借助一个小技巧——虚拟节点.
用来处理边界问题以及初始化问题。
算法代码
public int numDecodings1(String ss) {int n = ss.length();char[] s = ss.toCharArray();int[] dp = new int[n+1];dp[0] = 1;if(s[0]!='0') dp[1] = 1;for(int i=2;i<=n;i++){if(s[i-1]!='0'){dp[i] += dp[i-1];}int num = (s[i-2]-'0')*10+s[i-1]-'0';if(num>=10&&num<=26){dp[i] += dp[i-2];}}return dp[n];}
以上就是本篇所有内容~
若有不足,欢迎指正~
相关文章:
【动态规划】斐波那契数列模型
目录 动态规划 动态规划的基本步骤 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 算法分析 算法代码 算法代码 面试题 08.01. 三步问题 - 力扣(LeetCode) 算法分析 算法代码 优化 746. 使用最小花费爬楼梯 - 力扣&#x…...
Spring中的IOC详解
文章目录 IOC IOC容器的工作原理Bean的生命周期Bean的自动装配 AutowiredResourceInject 使用Spring底层组件 IOC Spring的核心之一是IOC,IOC全称为Inversion of Control,中文译为控制反转,是面向对象编程中的一种设计原则,可…...
深挖vue3基本原理之七 —— 功能模块的深度技术解析
Vue 3 四个核心功能模块的深度技术解析 一、Effect 调度系统:同步/异步任务队列 实现原理 // runtime-core/src/scheduler.ts const queue: (EffectJob | null)[] [] let isFlushing false const resolvedPromise Promise.resolve()function queueJob(job: Ef…...
数据结构 day 07
数据结构 day07 7. 树7.3. 层次遍历代码实现 8. 查询算法8.1. 顺序查找 seqSearch代码实现 8.2. 二分法查找 binarySearch代码实现 8.2. 分块查找 blockSearch代码实现 8.3. 哈希表 hash 9. 排序算法9.1. 冒泡排序 bubSort代码实现 9.2. 选择排序 selSort代码实现 9.3. 插入排序…...
《代码随想录》刷题笔记——回溯篇【java实现】
文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…...
React:初识React
React是什么? React是由Meta公司研发,也就是Facebook的公司(马克扎克伯格这个见人)研发的构建Web和原生交互界面的库 不仅可以写网页,还可以写苹果和安卓上面的app React的优势: React也是前端里最流行的…...
全面理解-c++中的内存布局
在 C 中,程序的内存布局指的是程序运行时,代码和数据在内存中的组织和分布方式。一般来说,C 程序的内存可以划分为以下几个主要区域: 1. 代码段(Text Segment,也称为 .text 段) 存储内容&…...
百度沈抖:传统云计算不再是主角,智能计算呼唤新一代“操作系统”
Create 2024 百度AI开发者大会 4月16日,Create 2024 百度AI开发者大会在深圳召开。期间,百度集团执行副总裁、百度智能云事业群总裁沈抖正式发布新一代智能计算操作系统——万源,通过对AI原生时代的智能计算平台进行抽象与封装设计ÿ…...
【银河麒麟高级服务器操作系统】服务器卡死后恢复系统日志丢失-分析及处理全过程
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://document.kylinos.cn 服务器环境以及配置 【机型】 处理器ÿ…...
VSCode Error Lens插件介绍(代码静态检查与提示工具)(vscode插件)
文章目录 VSCode Error Lens 插件介绍**功能概述****开发背景****使用方法****适用场景** VSCode Error Lens 插件介绍 功能概述 Error Lens 是一款增强 VS Code 错误提示的扩展工具,通过 内联显示错误和警告信息,直接定位代码问题,提升开发…...
ffmpeg configure 研究1-命令行参数的分析
author: hjjdebug date: 2025年 02月 14日 星期五 17:16:12 CST description: ffmpeg configure 研究1 ./configure 命令行参数的分析 文章目录 1 configure 对命令行参数的分析,在4019行1.1 函数名称: is_in1.2. 函数名称: enable1.3. 函数名称: set_all 2 执行退出判断的关键…...
如何调整 Nginx工作进程数以提升性能
🏡作者主页:点击! Nginx-从零开始的服务器之旅专栏:点击! 🐧Linux高级管理防护和群集专栏:点击! ⏰️创作时间:2025年2月15日14点20分 Nginx 的工作进程数࿰…...
分布式 NewSQL 数据库(TiDB)
TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。 TiDB是 PingCAP公司自主设计、研发的开源分布式关系型数据…...
try learning-git-branching
文章目录 mergerebase分离 HEAD相对引用利用父节点branch -f 撤销变更cherry-pick交互式 rebase只取一个提交记录提交的技巧rebase 在上一次提交上amendcherry-pick 在上一次提交上 amend tag多分支 rebase两个parent节点纠缠不清的分支偏离的提交历史锁定的Main推送主分支合并…...
【kafka系列】Kafka事务的实现原理
目录 1. 事务核心组件 1.1 幂等性生产者(Idempotent Producer) 1.2 事务协调器(TransactionCoordinator) 1.3 事务日志(Transaction Log) 2. 事务执行流程 2.1 事务初始化 2.2 发送消息 2.3 事务提…...
数据结构6
一、哈希散列--通讯录查找 #include "hash.h" #include <stdio.h> #include <stdlib.h> #include <string.h>//int *a[10];int hash_function(char key) {if (key > a && key < z){return key - a;}else if (key > A && …...
Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用
Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用 在 Flutter 里,Key 对象存在的目的主要是区分和维持 Widget 的状态,它是控件在渲染树里的「复用」标识之一,这一点在之前的《深入 Flutter 和 Compose 在 UI 渲染刷新时…...
src和href区别
src和href区别 (1)请求资源类型不同(2)作用结果不同(3)解析方式不同 (1)请求资源类型不同 href 用来建立文档和元素之间的链接(是引用),常用的有a、linksrc 在请求src资源时候会将指向的资源下载并且应用到文档中(引入),常用的有script、iframe、image。 (2)作用结果不同 hr…...
STM32之SG90舵机控制
目录 前言: 一、硬件准备与接线 1.1 硬件清单 1.2 接线 二、 SG90舵机简介 1.1 外观 1.2 基本参数 1.3 引脚说明 1.4 控制原理 1.5 特点 1.6 常见问题 三、 单片机简介 四、 程序设计 4.1 定时器配置 4.2 角度控制函数 4.3 主函数调用 五、 总结 …...
尚硅谷课程【笔记】——大数据之Hadoop【一】
课程视频链接:尚硅谷Hadoop3.x教程 一、大数据概论 1)大数据概念 大数据(Big Data):指无法再一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发…...
QEMU 搭建 Ubuntu x86 虚拟机
1. 安装 QEMU 在 Ubuntu 系统中,可以通过以下命令安装 QEMU: sudo apt-get update sudo apt-get install qemu-system-x86_64 qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager2. 创建虚拟硬盘镜像 qemu-img create -f raw ubuntu…...
mac 意外退出移动硬盘后再次插入移动硬盘不显示怎么办
第一步:sudo ps aux | grep fsck 打开mac控制台输入如下指令,我们看到会出现两个进程,看进程是root的这个 sudo ps aux|grep fsck 第二步:杀死进程 在第一步基础上我们知道不显示u盘的进程是:62319,我们…...
Acwing-基础算法课笔记之基础算法(双指针)
Acwing-基础算法课笔记之基础算法(双指针) 一、双指针算法概念二、关于双指针的一个问题三、模板 一、双指针算法概念 双指针(又称尺取法)是一个常用的优化技巧,用来解决序列的区间问题。 两个指针i,j&am…...
PCIE基础学习
PCIE PIO模式: 一个CPU传输一个32bit给PCIE(IP)。CPU直接与PCIE做数据传输。 DMA模式: CPU通过PCIE bridge 与多个PCIE设备连接,CPU发送命令给桥,桥控制PCIE与memory直接数据连接。 tlp报文 读报文 …...
架构——Nginx功能、职责、原理、配置示例、应用场景
以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明: 一、Nginx 的核心功能 1. 静态资源服务 功能:直接返回静态文件(如 HTML、CSS、JS、图片、视频等)。配置示例:server {listen 80…...
【教程】比亚迪车机接入AI大模型语音助手
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 更新说明: v1.1.0.2 1、新增长按音量键触发,不再需要迪加 (需设置modelisten)。 2、新增kimi、豆包、ChatGPT等多个GPT接口。 3…...
ios中常见的设计原则和设计模式
七大设计原则 1:开闭原则 对扩展开放,对修改关闭,在设计模块的时候,使模块在不被修改的前提下可以扩展功能 2:依赖倒置原则 实现尽量依赖抽象,不依赖具体实现 (1)高层模块不应该依赖底层模…...
WSL Ubuntu 安装 CUDA 教程
WSL Ubuntu 安装 CUDA 教程 1. 概述2. 准备工作3. 删除旧的 GPG 密钥4. 安装 CUDA Toolkit4.1 使用 WSL-Ubuntu 包安装(推荐) 5. 设置环境变量6. 注意事项7. 参考链接8. 总结 1. 概述 随着 WSL 2 的推出,Windows 用户现在可以在 Windows 子系…...
案例-02.部门管理-查询
一.查询部门-需求 二.查询部门-思路 API接口文档 三.代码实现 1.controller层:负责与前端进行交互,接收前端所发来的请求 注:Slf4j用于记录日志使用,可以省略private static Logger log LoggerFactory.getLogger(DeptControlle…...
【ARM】解决ArmDS Fast Models 中部分内核无法上电的问题
1、 文档目标 解决ArmDS Fast Models 中部分内核无法上电的问题。 2、 问题场景 在调用ArmDS的Fast Models中的Cortex-A55的模型,只有Core 0是上电状态,而Core 1处于掉电状态,如图2-1所示: 图2-1 3、软硬件环境 1)…...
docker 基础命令使用(ubuntu)
docker 状态查询 docker ps docker ps -adocker --version docker info docker --help docker run --help docker ps --help ...docker 操作镜像命令 docker imagesdocker rmi 镜像id/镜像名docker 操作容器命令 docker ps docker ps -adocker run 命令 # 端口映射 -p 参数…...
WEB安全--SQL注入--二次注入
一、原理: 二次注入的关键在于攻击者的输入并不立即执行,而是经过某些存储或处理后,在后续某个步骤中再触发注入攻击 二、示例: 2.1、sqli-labs-master/less-24: admin# 第一次在网页注册账号和密码时没有漏洞&#x…...
c++中什么时候应该使用final关键字?
在C中,final关键字是自C11标准引入的重要特性,主要用于类继承和虚函数重写机制的约束。下面从技术原理、使用场景和最佳实践三个维度进行系统分析,并给出工业级代码示例。 目录 一、技术原理深度解析 二、关键使用场景分析 1. 类级别的fi…...
DeepSeek学术秘籍:如何让DeepSeek辅助论证?
随着人工智能技术的飞速发展,AIGC技术在学术领域的应用逐渐引起了广泛关注。其中最近大火的DeepSeek作为一款基于大语言模型的应用,其出现标志着学术论文写作中研究方法的一次重大变革。 辅助论证 在学术论文写作中,借助DeepSeek优化辅助论证…...
Atlassian工具集:Jira与Confluence集成优势、使用技巧、更新功能等
本文由Atlassian全球白金合作伙伴-龙智翻译整理,深入探讨了Jira和Confluence最受欢迎的集成功能与技巧,期待为您新一年的团队协作开个好头。 此前,来自K15t 的Customer Advocate Matt Reiner 和Atlassian副产品经理David Olive在一场学习会议…...
传输层协议TCP ( 下 )
文章目录 前言序号与确认序号超时重传RTOJacobson算法内核中超时时间的计算 滑动窗口滑动窗口延迟应答流量控制 拥塞控制慢启动拥塞避免快重传快速恢复 保活机制参考资料 前言 TCP(Transmission Control Protocol,传输控制协议)是互联网最重要…...
【Deepseek 零门槛指南】DeepSeek 教程和常见问题解答 | 大白技术控
粉丝朋友们大家好,我是极客学长。最近一直在玩 DeepSeek,积累了一点经验,用它提高写作的效率挺好用的。 在使用DeepSeek的过程中,也遇到了如下几个问题(相信很多小伙伴也遇到了): DeepSeek 官网卡顿,突然出…...
ELK组成及实现原理
ELK是由三个主要组件组成的日志处理和搜索平台,分别是: Elasticsearch:Elasticsearch 是一个基于Lucene构建的开源搜索引擎,提供强大的搜索、分析功能。它负责存储和索引所有数据,并提供实时搜索能力。数据可以通过HTT…...
迅为RK3568开发板篇OpenHarmony实操HDF驱动配置LED-LED测试
将编译好的镜像全部进行烧写,镜像在源码根目录 out/rk3568/packages/phone/images/目录下。 烧写完成之后,在调试串口查看打印日志,如下图所示: 然后打开 hdc 工具,运行测试程序,输入“led_test 1”&…...
【C++】IO流
目录 一、C语言的输入与输出二、流是什么三、CIO流3.1 C标准IO流3.2 C文件IO流3.2.1 二进制读写3.2.2 文本读写 四、stringstream的简单介绍结尾 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据…...
前端知识速记--css篇:CSS3中的常见动画及实现方式
前端知识速记–css篇:CSS3中的常见动画及实现方式 常见的CSS3动画 1. 过渡 (Transitions) 过渡是一种非常简单的动画效果,允许你在元素的状态变更时平滑过渡到新状态。 语法格式: transition: property duration timing-function delay;…...
一个根据输入内容过滤下拉选的组件
1.element的select自定义过滤不是很灵,使用了input和dropdown 组件 <template><div class"autocomplete-wrapper"><!-- 使用 el-input 组件 --><el-inputv-model"inputValue"input"handleInput"placeholder&q…...
Java中的分布式(概念说明)
1. 分布式的基本概念 1.1 什么是分布式系统? 分布式系统(Distributed System):由多台服务器(或节点)协同工作,对外提供一个整体服务。不同节点之间通过网络通信来协同处理请求或共享数据&…...
国产编辑器EverEdit - 上下翻滚不迷路(历史编辑位置、历史光标位置回溯功能)
1 光标位置跳转 1.1 应用场景 某些场景下,用户从当前编辑位置跳转到别的位置查阅信息,如果要快速跳转回之前编辑位置,则可以使用光标跳转相关功能。 1.2 使用方法 1.2.1 上一个编辑位置 跳转到上一个编辑位置,即文本修改过的位…...
css简介
一.css-网页的美容师 css也是一种标记语言,主要用于设置HTML页面中的文本内容(字体大小对齐方式),图片外形(宽高 边框样式 边距等)以及版面的布局和外观显示样式。 二.css语法规范 css规则由两个主要的部分构成:选择器以及一条…...
GoC题解(21) 725.画迷宫(下册第4课)
题目描述 真观察下面迷宫图。发现它是一个边长逐渐变长的15边回旋图,边长依次为10、20、30....。 参考答案 int main(){int len0;for(int i1;i<15;i){ len10;pen.fd(len).rt(90); }return 0; } 解题思路 使用一个变量来记录每次循环时应该画多长的边&#…...
DDD该怎么去落地实现(3)通用的仓库和工厂
通用的仓库和工厂 我有一个梦,就是希望DDD能够成为今后软件研发的主流,越来越多研发团队都转型DDD,采用DDD的设计思想和方法,设计开发软件系统。这个梦想在不久的将来是有可能达成的,因为DDD是软件复杂性的解决之道&a…...
sql sqlserver的特殊函数COALESCE和PIVOT的用法分析
一、COALESCE是一个返回参数中第一个非NULL值的函数, 列如:COALESCE(a,b,c,d,e);可以按照顺序取abcde,中的第一个非空数据,abcde可以是表达式 用case when 加ISNULL也可以实现,但是写法复杂了…...
FPGA简介|结构、组成和应用
Field Programmable Gate Arrays(FPGA,现场可编程逻辑门阵列),是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物, 是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,…...
Vue2/Vue3生命周期对比
Vue2的生命周期钩子 beforeCreate 在实例初始化之后,数据观测(data)和事件配置之前调用。此时无法访问 data、methods 等。 created 在实例创建完成后调用。此时可以访问 data、methods,但 DOM 还未生成。 beforeMount 在挂载…...