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

【Swift】LeetCode 1. 两数之和

1. 两数之和

刚开始学习 Swift 的语法,纯看文档过于枯燥,因此在这个专栏记录使用 Swift 刷题的一些题解,在实操中掌握 Swift 的语法。第一题我们从最经典的「两数之和」开始,基于这道题目可以熟悉 Swift 当中 Dictionary 的声明、实例化与使用。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/60e75f2be9094347964523c566491301.png# pic_center)

题目描述

请添加图片描述

思路与 Swift 题解

思路其实很简单,我们使用一次遍历的方式来解题。

首先,我们声明一个 Swift 的 Dictionary,声明的方式有两种:

// 1. 使用 () 生成
var mp = [Int: Int]()// 2. 使用 ":" 指定变量的类型, 然后声明一个空的 Dictionary
var mp: [Int: Int] = [:]

在遍历时,我们需要记录当前数值num出现在数组当中的下标,每次记录之前,我们需要先判断target - num是否已经出现在了数组当中,如果出现过了,那么mp当中会记录它出现的位置,num + (target - num) == target,因此直接返回当前位置imp[target - num]记录的下标位置j即可。

for (i, num) in nums.enumerated() {if var j = mp[target - num], i != j {return [i, j]}mp[num] = i
}

需要注意的一点是,在 Swift 当中,使用if let j = mp[target - num]这样的表达式可以在if条件句当中取出字典当中的数值,这叫做 Swift 的“可选绑定”,它的作用是判断可选类型(mp[target - num]就是一个可选类型,严格意义上来说它的类型是Int?,也就是Int数值或nil,原因是Dictionary当中可能还没有记录这个Key)的值是否存在,如果存在,那么会对可选类型进行自动解包(将Int?解包为Int);如果不存在,则不会进入这个语句块。

同时,与 Go 不同的是,如果j自动解包成功,那么在if当中后续的判断条件使用,进行连接,而不是&&,这一点有一些反直觉。需要注意的是,只有在if当中使用“可选绑定”时,可选绑定语句需要与其它条件使用,连接,例如:

if let name = user.name, let email = user.email, !name.isEmpty && email.contains("@") {sendEmail(to: email)
}

完整的 Swift 题解是:

class Solution {func twoSum(_ nums: [Int], _ target: Int) -> [Int] {var mp = [Int: Int]()for (i, num) in nums.enumerated() {if var j = mp[target - num], i != j {return [i, j]}mp[num] = i}return []}
}

需要注意的一点是,LeetCode 给出的函数模版当中,在参数numstarget之间都加入了_,它们的作用是告知函数使用者在调用时,可以不显式标注形参的名称,而是按照形参声明的顺序调用函数,否则在调用时,需要:twoSum(nums: curr_nums, targert: curr_target)

http://www.dtcms.com/a/474547.html

相关文章:

  • CI/CD流水线实战:从零搭建到高效部署
  • AprioriFP-Growth算法详解
  • 吕梁网站定制wordpress登录注册页面模板
  • 网站列表页是啥求个网站这么难吗2021年
  • wordpress如何制作网站做影片的网站描述
  • Java Redis “高可用 — 主从复制”面试清单(含超通俗生活案例与深度理解)
  • etcd实战课-实战篇(下)
  • 定制一个网站多少钱企业做网站有用吗天涯
  • 05-k8s网络
  • Stable Diffusion 安装教程(详细)_stable diffusion安装
  • 做网站的dw全称是啥免费软件视频
  • 开源TTS项目 Neutts-Air:架构、训练、推理与应用全景
  • python--手势识别
  • 烟台网站建设设计国内哪家网站建设公司好
  • 实操三、使用cgroups对cpu进行控制
  • 广东建设工程造价管理协会网站网站分析数据
  • Python基础入门例程100-NP100 重载运算(涉及类-难)
  • 路漫漫-数据结构与算法邂逅Java
  • 上海学做网站筑龙网app下载
  • 深入理解动态内存管理(C语言)
  • Viterbi解码算法:从理论到实践
  • 怎么在网站做推广不要钱珠海微信网站开发
  • 【文件快速搜索工具】实用工具强推之Everything-快速搜索工具的详细图文下载安装教程
  • sql优化之索引下推误区
  • 编程基础:组件编程思想
  • 小兔鲜项目要点总结
  • 检测网站速度广州免费停车的地方
  • 【C++】list相关接口及模拟实现
  • Vue-MVVM 模型
  • 网站需要什么费用高端品牌网站有哪些