代码随想录-Day38

509. 斐波那契数

斐波那契数 (通常用 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

方法一:

class Solution {public int fib(int n) {if (n < 2) return n;int a = 0, b = 1, c = 0;for (int i = 1; i < n; i++) {c = a + b;a = b;b = c;}return c;}
}

这段代码是使用Java编写的,实现了一个计算斐波那契数列第n项的函数。斐波那契数列定义为每个数字是前两个数字之和,通常以0和1开始。这里是一个详细解析:

函数签名

public int fib(int n)

该函数名为fib,接受一个整数参数n,返回计算出的斐波那契数列的第n项。

函数逻辑

  1. 基本情况处理:

    if (n < 2) return n;
    

    如果n小于2(即n为0或1),直接返回n,因为斐波那契数列的前两项分别是0和1。

  2. 迭代计算斐波那契数:
    初始化三个整数变量:

    int a = 0, b = 1, c = 0;
    

    其中,ab用于存储当前要相加的两个斐波那契数,初始化为0和1;c用于存储它们的和。

    接下来是一个for循环,从1遍历到n-1(因为ab已经表示了第一项和第二项):

    for (int i = 1; i < n; i++) {c = a + b;a = b;b = c;
    }
    

    在每次循环中,先计算ab的和赋值给c,然后将b的值赋予a,将c的值赋予b,这样ab始终指向当前需要考虑的斐波那契数列的两项,而c则保存了新的和。

  3. 返回结果:
    循环结束后,c中存储的就是斐波那契数列的第n项,直接返回c即可。

示例

例如,如果调用fib(6),函数会返回斐波那契数列的第6项,计算过程如下:

  • 初始:a=0, b=1, c=0
  • 第1次循环后:a=1, b=1, c=1
  • 第2次循环后:a=1, b=2, c=3
  • 第3次循环后:a=2, b=3, c=5
  • 第4次循环后:a=3, b=5, c=8
  • 第5次循环后:a=5, b=8, c=13

因此,fib(6)返回13

方法二:

//非压缩状态的版本
class Solution {public int fib(int n) {if (n <= 1) return n;             int[] dp = new int[n + 1];dp[0] = 0;dp[1] = 1;for (int index = 2; index <= n; index++){dp[index] = dp[index - 1] + dp[index - 2];}return dp[n];}
}

这段代码是使用Java语言实现的一个计算斐波那契数列第n项的函数。斐波那契数列是一个经典的数列,其中每一项都是前两项的和,通常以0和1开始。下面是这段代码的详细解释:

函数签名

public int fib(int n)

这个函数名为fib,接收一个整数n作为参数,返回斐波那契数列的第n项。

函数逻辑

  1. 基本情况处理:

    if (n <= 1) return n;
    

    如果输入的n小于或等于1,根据斐波那契数列的定义,直接返回n自身,因为fib(0)=0fib(1)=1

  2. 初始化动态规划数组:

    int[] dp = new int[n + 1];
    dp[0] = 0;
    dp[1] = 1;
    

    创建一个长度为n+1的数组dp来存储斐波那契数列的值,其中dp[0]=0dp[1]=1对应斐波那契数列的前两项。

  3. 动态规划填充数组:

    for (int index = 2; index <= n; index++){dp[index] = dp[index - 1] + dp[index - 2];
    }
    

    从索引2开始遍历到n(包含n),使用循环依次计算并存储斐波那契数列的每一项。每一项dp[index]的值由前两项dp[index - 1]dp[index - 2]的和计算得出,这是斐波那契数列的基本定义。

  4. 返回结果:

    return dp[n];
    

    在循环结束后,数组dp的最后一个元素dp[n]即为斐波那契数列的第n项,所以直接返回该值。

示例

比如,如果调用fib(6),函数会计算并返回斐波那契数列的第6项,即0, 1, 1, 2, 3, 5, 8中的8

这种方法称为动态规划,相较于递归解法,它避免了重复计算,提高了效率,特别是在计算较大的n时更为明显。

70. 爬楼梯

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

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

示例 1:

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

  1. 1 阶 + 1 阶
  2. 2 阶
    示例 2:

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

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶
    在这里插入图片描述

方法一:

// 常规方式
public int climbStairs(int n) {int[] dp = new int[n + 1];dp[0] = 1;dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
}

这段代码是使用Java语言实现的一种动态规划方法,用于解决“爬楼梯”问题。问题描述如下:假设你正在爬一个楼梯,每次你可以爬1阶或者2阶。给定楼梯的总阶数n,返回爬到楼顶的方法总数。

代码解析

  • 初始化: 创建一个长度为n + 1的整型数组dp,用来存储爬到各个阶梯的方法数。dp[0]dp[1]都初始化为1,表示爬到第0阶有1种方法(即不爬),爬到第1阶也有1种方法(直接爬一阶上去)。

  • 状态转移方程: 对于dp[i](其中i >= 2),可以根据状态转移方程dp[i] = dp[i - 1] + dp[i - 2]来计算,即爬到第i阶的方法数等于爬到第i - 1阶的方法数加上爬到第i - 2阶的方法数。这是因为到达第i阶,要么是从第i - 1阶爬一阶上来,要么是从第i - 2阶爬两阶上来。

  • 返回结果: 最终,dp[n]就是爬到第n阶楼梯的方法总数,因此返回dp[n]作为答案。

举例说明

假设n = 3,即有3阶楼梯,按照代码逻辑计算过程如下:

  • dp[0] = 1, dp[1] = 1
  • 计算dp[2]时,dp[2] = dp[1] + dp[0] = 1 + 1 = 2,表示到第2阶有2种方法(1+1 或者 2)。
  • 计算dp[3]时,dp[3] = dp[2] + dp[1] = 2 + 1 = 3,表示到第3阶有3种方法(1+1+1, 1+2, 或者 2+1)。

因此,当n = 3时,返回的结果是3,即有3种不同的方法爬到楼顶。

方法二:

// 用变量记录代替数组
class Solution {public int climbStairs(int n) {if(n <= 2) return n;int a = 1, b = 2, sum = 0;for(int i = 3; i <= n; i++){sum = a + b;  // f(i - 1) + f(i - 2)a = b;        // 记录f(i - 1),即下一轮的f(i - 2)b = sum;      // 记录f(i),即下一轮的f(i - 1)}return b;}
}

这段代码是使用Java语言实现的一个简化版的动态规划方法来解决“爬楼梯”问题。与之前使用数组记录每个阶梯的方法数不同,这里仅使用了三个变量absum来减少空间复杂度,达到了O(1)的空间复杂度要求,而时间复杂度仍然是O(n)。下面是代码的详细解释:

代码逻辑解析

  • 基础情况处理: 如果输入的阶数n小于等于2,直接返回n,因为当只有1阶或2阶楼梯时,方法数分别为1和2。

  • 变量初始化: 定义三个整型变量absum,其中ab分别初始化为1和2,对应爬到第一阶和第二阶楼梯的方法数。sum用来临时存储每轮循环中爬到当前阶的方法数。

  • 循环计算: 从第三阶楼梯(i = 3)开始计算,直到目标阶数n。在每次循环中:

    • 计算sum = a + b,即当前阶的方法数等于前一阶的方法数加上前两阶的方法数。
    • 更新a = b,把当前的b值(即上一阶的方法数)赋给a,为下一轮计算做准备。
    • 更新b = sum,把刚计算出来的sum(当前阶的方法数)赋给b,为下一轮计算做准备。
  • 返回结果: 循环结束后,变量b中存储的就是爬到n阶楼梯的方法总数,直接返回b

举例说明

假设我们要计算爬5阶楼梯的方法数,过程如下:

  1. 初始:a = 1(到第1阶的方法数),b = 2(到第2阶的方法数)。
  2. 第一轮计算(阶数3): sum = a + b = 1 + 2 = 3,更新后a = 2, b = 3
  3. 第二轮计算(阶数4): sum = a + b = 2 + 3 = 5,更新后a = 3, b = 5
  4. 第三轮计算(阶数5): sum = a + b = 3 + 5 = 8,此时b即为爬到第5阶的方法数。

最终返回b = 8,表示有8种不同的方法可以爬到5阶楼梯的顶部。

746. 使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

示例 1:

输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。

  • 支付 15 ,向上爬两个台阶,到达楼梯顶部。
    总花费为 15 。
    示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。

  • 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
  • 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
  • 支付 1 ,向上爬一个台阶,到达楼梯顶部。
    总花费为 6 。
    在这里插入图片描述

方法一:

// 方式一:第一步不支付费用
class Solution {public int minCostClimbingStairs(int[] cost) {int len = cost.length;int[] dp = new int[len + 1];// 从下标为 0 或下标为 1 的台阶开始,因此支付费用为0dp[0] = 0;dp[1] = 0;// 计算到达每一层台阶的最小费用for (int i = 2; i <= len; i++) {dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[len];}
}

这段Java代码是解决“最小成本爬楼梯”问题的一个实现。给定一个非负整数数组 cost,其中 cost[i] 是爬到第 i 阶楼梯的成本。一旦你支付了爬到某阶楼梯的成本,就可以选择不再支付直接爬到更高一层或者爬两层。该函数的目标是计算达到顶层楼梯的最低花费。这里采用的是自底向上的动态规划方法。

代码解析:

  1. 初始化:首先,定义数组 dp 来存储到达每个楼层的最小成本,数组长度为 len + 1,因为我们要计算到达最后一阶楼梯之上(即到达顶层)的成本。初始化 dp[0]dp[1] 为0,意味着从地面(下标0)或第一个台阶(下标1)开始爬,不需要额外支付费用。

  2. 动态规划状态转移:遍历从下标2到len(包括len),对于每个位置 i,有两种方式到达:一是从 i-1 阶楼梯爬上来,二是从 i-2 阶楼梯爬上来。因此,到达第 i 阶楼梯的最小成本可以通过比较这两种方式的成本并取最小值得到,即 dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])

  3. 返回结果:遍历结束后,dp[len] 存储的就是到达顶层楼梯的最小成本,直接返回这个值。

示例说明:

假设 cost = [10, 15, 20],表示爬到第一阶楼梯成本为0(根据初始化逻辑),第二阶为10,第三阶为15。按照上述逻辑计算:

  • dp[2] = min(dp[1] + cost[1], dp[0] + cost[0]) = min(0 + 10, 0 + 0) = 10
  • dp[3] = min(dp[2] + cost[2], dp[1] + cost[1]) = min(10 + 20, 0 + 15) = 15

因此,到达顶层(即第三阶楼梯之上)的最小成本为15,这就是函数的返回值。

方法二:

// 方式二:第一步支付费用
class Solution {public int minCostClimbingStairs(int[] cost) {int[] dp = new int[cost.length];dp[0] = cost[0];dp[1] = cost[1];for (int i = 2; i < cost.length; i++) {dp[i] = Math.min(dp[i - 1], dp[i - 2]) + cost[i];}//最后一步,如果是由倒数第二步爬,则最后一步的体力花费可以不用算return Math.min(dp[cost.length - 1], dp[cost.length - 2]);}
}

这段Java代码也是解决“最小成本爬楼梯”问题的一个实现,但与之前的方式稍有不同。这里是假设从第一阶楼梯开始就需要支付费用,然后采用动态规划的方法来求解到达顶层楼梯的最小花费。具体解析如下:

代码解析:

  1. 初始化:首先,定义一个长度与输入数组 cost 相同的数组 dp,用来存储到达每个阶梯时的最小花费。初始化 dp[0]dp[1] 分别为 cost[0]cost[1],表示从地面到第一阶和到第二阶的花费。

  2. 动态规划状态转移:从下标为2的位置开始遍历至数组末尾(不包括),对于每一个位置 i,到达此处的最小花费等于前一阶梯的最小花费和前前一阶梯的最小花费中的较小者,再加上当前位置 i 的花费。即 dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i]。这样做是为了确保以最少的花费到达当前阶梯。

  3. 返回结果:到达顶层楼梯有两种情况,一种是从倒数第一阶直接上,一种是从倒数第二阶上。因此,返回 dp[cost.length - 1]dp[cost.length - 2] 中的较小值,即为最小成本。注意,这里最后一步不额外计算费用,因为到达倒数第二阶时,已经计算了到达顶层所需的最小花费。

示例说明:

如果 cost = [10, 15, 20],则:

  • dp[0] = 10
  • dp[1] = 15
  • 遍历过程中,dp[2] = min(dp[1], dp[0]) + cost[2] = min(15, 10) + 20 = 10 + 20 = 30

最后,Math.min(dp[2], dp[1]) = Math.min(30, 15),因此返回 15 作为最小成本。

这种方式同样高效地解决了问题,但注意其假设前提与之前的方式不同,是从第一阶开始就需要支付费用。

方法三:

// 状态压缩,使用三个变量来代替数组
class Solution {public int minCostClimbingStairs(int[] cost) {// 以下三个变量分别表示前两个台阶的最少费用、前一个的、当前的。int beforeTwoCost = 0, beforeOneCost = 0, currentCost = 0;// 前两个台阶不需要费用就能上到,因此从下标2开始;因为最后一个台阶需要跨越,所以需要遍历到cost.lengthfor (int i = 2; i <= cost.length; i ++) {// 此处遍历的是cost[i - 1],不会越界currentCost = Math.min(beforeOneCost + cost[i - 1], beforeTwoCost + cost[i - 2]);beforeTwoCost = beforeOneCost;beforeOneCost = currentCost;}return currentCost;}
}

这段Java代码是解决“最小成本爬楼梯”问题的另一种实现,采用了状态压缩的方法,即使用三个变量而不是数组来存储到达每个阶梯所需的最小成本。这种方式减少了空间复杂度,但仍然保持了动态规划的思想。下面是详细的解析:

代码解析:

  1. 变量定义:定义三个整型变量beforeTwoCostbeforeOneCostcurrentCost,分别代表到达前两个台阶、前一个台阶和当前台阶的最小成本。初始时,前两个台阶和前一个台阶的最小成本都设为0,因为题目中并没有明确指出从第一个台阶开始就有费用,但根据逻辑推断,此处默认从地面到第一个和第二个台阶是免费的,或者理解为beforeTwoCostbeforeOneCost是站在第一阶和第二阶的费用,自然为0。

  2. 循环遍历:从i = 2开始遍历至cost.length(包含cost.length,意味着考虑到达顶层楼梯后的状态),这一步是基于从地面(下标0)或第一个台阶(下标1)出发的逻辑,但因为cost数组的下标是从0开始的,所以计算时访问的是cost[i - 1]cost[i - 2]

  3. 状态转移:在每次循环中,计算到达当前台阶的最小成本currentCost,通过比较从上一个台阶和前一个台阶到达当前台阶的最小花费。具体来说,currentCost = Math.min(beforeOneCost + cost[i - 1], beforeTwoCost + cost[i - 2]),表示当前到达的阶梯可以通过上一个阶梯或跳过一个阶梯从更早的阶梯到达,选择其中成本较小的路径。

  4. 状态更新:更新beforeTwoCostbeforeOneCost的值,为下一次迭代做准备。即将当前的beforeOneCost赋值给beforeTwoCost,将刚刚计算的currentCost赋值给beforeOneCost

  5. 返回结果:循环结束后,currentCost即为到达顶层楼梯所需的最小成本,直接返回。

示例说明:

如果输入数组cost = [10, 15, 20],则遍历过程如下:

  • 初始化:beforeTwoCost = 0, beforeOneCost = 0
  • 第一轮计算(i = 2):currentCost = min(0 + 10, 0 + 0) = 10,更新后beforeTwoCost = 0, beforeOneCost = 10
  • 第二轮计算(i = 3):currentCost = min(10 + 15, 0 + 20) = 20,更新后beforeTwoCost = 10, beforeOneCost = 20

遍历结束,currentCost = 20即为最小成本,因此返回20。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01 Swift 基础语法(变量,常量,注释,整数,浮点数,元组)

Swift 介绍 Swift 是一门用于开发 iOS、macOS、watchOS 和 tvOS 应用的新编程语言。它以安全、快速和互动的特点而著称。Swift 提供了代码预览&#xff08;playgrounds&#xff09;功能&#xff0c;使程序员可以在不编译和运行应用程序的情况下&#xff0c;实时运行 Swift 代码…

Python web 开发 flask 实践

1、前言 前文已经介绍了很多关于 python 的算法和脚本的写法&#xff0c;在本文将开启python的 web 的开发&#xff0c;和java 类似的&#xff0c;对于 web 开发也需要引入框架&#xff0c;对于 python 的 web 开发来说常见的有 flask 和 django 两种&#xff0c;在本文中将要…

vscode用vue框架1写一个登陆页面

目录 一、创建登录页面 二、构建好登陆页面的路由 三、编写登录页代码 1.添加基础结构 2.给登录页添加背景 3.解决填充不满问题 4.我们把背景的红颜色替换成背景图&#xff1a; 5.在页面中央添加一个卡片来显示登录页面 6.设置中间卡片页面的左侧 7.设置右侧的样式及…

华芯微特SWM34-使用定时器捕获快速解码EV1527编码

在无线应用领域&#xff0c;很多433Mhz和315Mhz的遥控器&#xff0c;红外探测器&#xff0c;门磁报警器&#xff0c;无线门铃等都使用EV1527编码格式来发射数据。发射和接收均有对应的RF芯片完成&#xff0c;而且成本极低&#xff08;目前市场价3毛钱不到&#xff09;。接收芯片…

复分析——第7章——ζ 函数和素数定理(E.M. Stein R. Shakarchi)

第7章 ζ函数和素数定理 Bernhard Riemann, whose extraordinary intuitive powers we have already mentioned, has especially renovated our knowledge of the distribution of prime numbers, also one of the most mysterious questions in mathematics. He has tau…

《中国尘肺病农民工调查报告(2023)》

这份报告由中华社会救助基金会大爱清尘基金发布。 《中国尘肺病农民工调查报告(2023)》是一份深入探讨中国尘肺病农民工现状与挑战的研究报告。报告不仅详细记录了尘肺病患者的生存困境、经济与医疗状况,还对政策的实施效果进行了评估,并提出了针对性的建议。通过对不同地区、…

Vitis Accelerated Libraries 学习笔记--Vision 库介绍

目录 1. 简介 2. 分类介绍 2.1 图像容器 2.2 图像处理基础 2.3 图像滤波和平滑 2.4 图像变换和增强 2.5 图像分析和特征检测 2.6 数学和算术操作 2.7 图像校正和优化 2.8 颜色和阈值处理 2.9 高级图像处理 2.10 光流和运动估计 2.11 图像转换和映射 2.12 其他特殊…

Android Media Framework(八)OMXNodeInstance - Ⅰ

OpenMAX框架的学习有两大难点&#xff0c;一是组件的状态切换与buffer的流转过程&#xff0c;这部分内容我们已经在IL Spec中学习过了&#xff1b;二是OMX组件使用的buffer类型与buffer分配过程&#xff0c;这一节我们来重点剖析OMX组件使用的buffer类型。 1、引言 在实际应用…

业务架构交付物

背景 业务的核心元素、扩展元素以及它们的协同关系&#xff0c;业务架构和其他架构的关系等等已经有了不少认识&#xff0c;那么&#xff0c;通过对业务架构的还原和分析&#xff0c;到底能够得到什么业务架构的内容呢&#xff1f;它可以是一套流程框架体系&#xff0c;也可以…

探索约束LLM输出JSON的应用

0、 引言 JSON&#xff08;JavaScript Object Notation&#xff09;因其简洁、易读和易于解析的特性&#xff0c;已成为全球使用最广泛的数据交换格式之一。它能够满足各种数据交换需求&#xff0c;特别是在构建人工智能驱动的应用程序时&#xff0c;工程师们经常需要将大型语…

深度学习工具|LabelImg(标注工具)的安装与使用教程

1 简介 Label是一款免费的图像标注软件&#xff0c;可以以矩形框的形式对图像中的物体进行标记&#xff0c;常用于分类和目标检测。并可以将标记信息保存为PasclVOC&#xff08;xml&#xff09;、YOLO&#xff08;txt&#xff09;、CreateML&#xff08;json&#xff09;格式。…

Python中对含有转义字符的变量,如何处理

file_path C:\Users\EDY\PJ-IPAStudio\designer\project 这是一个路径的字符串&#xff0c;要访问这个路径下的文件&#xff0c;是会报错的 file_path rC:\Users\EDY\PJ-IPAStudio\designer\project 需要在前面添加 r 如果他是一个变量&#xff0c;如何对变量里的字符修改呢&…

0802功放2

功放要记一般的式子&#xff0c;而非最大的式子&#xff0c;因为总不能总开到最大音量上工作&#xff0c;而是在比较合适的音量上工作 运放的最大电压也是比电源低1~2V 饱和三极管的功率&#xff0c;电流越大&#xff0c;饱和压降越大&#xff1f;&#xff1f;&#xff1f;不…

STM32G474的浮点数四则运算速度实测

一、FPU的启用 FPU 即浮点运算单元&#xff08;Float Point Unit&#xff09;。浮点运算&#xff0c;对于定点 CPU&#xff08;没有 FPU 的 CPU&#xff09;来说必须要按照 IEEE-754 标准的算法来完成运算&#xff0c;是相当耗费时间的。而对于有 FPU 的 CPU来说&#xff0c;浮…

【Golang】Steam 创意工坊 Mod 文件夹批量重命名

本文将介绍一个使用Go语言编写的脚本&#xff0c;其主要功能是解析XML文件并基于解析结果重命名文件夹。这个脚本适用于需要对文件夹进行批量重命名&#xff0c;并且重命名规则依赖于XML文件内容的情况。 脚本功能概述 Steam创意工坊下载的Mod文件夹批量重命名为id名称 运行前…

Tomcat get请求传数组集合参数

前言 最近做项目&#xff0c;需要通过GET传参&#xff0c;来实现查询的能力&#xff0c;本来是RPC调用&#xff0c;直接参数序列化即可。但是服务最近修改为HTTP&#xff0c;本来Spring Cloud的feign也可以直接传参数&#xff0c;但是当使用Nginx访问时参数到底传啥呢&#xf…

iOS Swift5 视频播放

文章目录 1.截图2.代码3.导入本地文件 1.截图 2.代码 import UIKit import AVKit import AVFoundationclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor .white// 创建按钮let button UIButton(type: .syste…

【学习】程序员资源网站

1 书栈网 简介&#xff1a;书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站&#xff0c;在书栈网你可以找到很多书籍、笔记资源。在这里&#xff0c;你可以根据热门收藏和阅读查看大家都在看什么&#xff0c;也可以根据技术栈分类找到对应模块的编程资源&#xff0c;…

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法(以太网)

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法(以太网) 具体连接伺服驱动器的步骤可参考以下内容: 启动InoDriverShop, 新建或打开工程 如下图所示,选择在线,选中SV660F图标,右侧通信类型选择“TCP—DCP”,点击下一步,同时要选择自己当前使用的网卡…

【扩散模型(一)】Stable Diffusion中的重建分支(reconstruction branch)和条件分支(condition branch)

Stable Diffusion 是一种基于扩散模型的生成模型&#xff0c;用于生成图像等数据。在解释 Stable Diffusion 的过程中&#xff0c;经常会提到两个主要的分支&#xff1a;重建分支&#xff08;reconstruction branch&#xff09;和条件分支&#xff08;condition branch&#xf…