6.使用leetcode去练习语言
1 本章预览
事实上本章并不会去讲述go语言的基础情况,而是去介绍如何使用Leetcode去帮助我们去学习go语言的基本语法,当然本章的内容也适合于其他语言。
Leetcode是一个很好的在线判题系统(Online Judge,OJ),它几乎支持所有主流语言的学习,例如C/C++,Java,Python, Go, JavaScript等等。
使用Leetcode学习编程语言有以下好处:
- 提供实时反馈:在线判题系统可以立即对提交的程序进行编译和执行,并返回结果,这有助于学习者及时了解自己的代码是否正确,以及程序的运行时间和内存使用情况。
- 自动评测:在线判题系统可以自动判断程序的正确性,这使得学习者可以专注于编写代码的逻辑,而不必担心测试和调试的问题。
- 适合初学者:对于初学者来说,在线判题系统提供了一个安全、可靠的环境,让他们可以自由地尝试和练习编程,不用担心会破坏或影响其他程序。
- 自我挑战:在线判题系统通常会有一些难度不一的题目,学习者可以通过解决这些问题来提高自己的编程技能和解决问题的能力。
- 社区支持:在线判题系统通常有一个社区功能,学习者可以在这里与其他人交流、分享代码和经验,这有助于提高学习者的编程技能和编程兴趣。
总之,使用在线判题系统学习编程语言可以帮助学习者提高编程技能、解决问题能力和编程兴趣。
2 简单题举例
2.1 题目描述
罗马数字包含以下七种字符: I
, V
, X
, L
,C
,D
和 M
。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2
写做 II
,即为两个并列的 1 。12
写做 XII
,即为 X
+ II
。 27
写做 XXVII
, 即为 XX
+ V
+ II
。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII
,而是 IV
。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX
。这个特殊的规则只适用于以下六种情况:
I
可以放在V
(5) 和X
(10) 的左边,来表示 4 和 9。X
可以放在L
(50) 和C
(100) 的左边,来表示 40 和 90。C
可以放在D
(500) 和M
(1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。
2.2 题目解析
学习完go语言的基础部分,事实上我们有多种方法去解题,为了存储罗马数字和阿拉伯数字的关系我们使用数据类型map,,转化成阿拉伯数字相加,然后我们发现遍历当前的值比当前右边的值小时要减当前值,反之加上当前值,例如IV,第1个I要减1,第2个V要加5。
看解决简单题事实上很简单,1.决定关键数据存储类型 2.决定程序的算法。为此事实上程序就是数据结构加上算法。
2.3 题解
var riMap = map[byte]int{
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
func romanToInt(s string) int {
ans := 0
i := 0
for i = 0; i < len(s)-1; i++ {
if riMap[s[i]] < riMap[s[i+1]] {
ans -= riMap[s[i]]
} else {
ans += riMap[s[i]]
}
}
ans += riMap[s[i]]
return ans
}
2.4 涉及基础语法
函数,分支选择结构,循环结构,字符串,
3 中等题举例
3.1 题目描述
请你来实现一个 myAtoi(string s)
函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi
函数)。
函数 myAtoi(string s)
的算法如下:
- 读入字符串并丢弃无用的前导空格
- 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
- 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
- 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为
0
。必要时更改符号(从步骤 2 开始)。 - 如果整数数超过 32 位有符号整数范围
[−2^31, 2^31 − 1]
,需要截断这个整数,使其保持在这个范围内。具体来说,小于−2^31
的整数应该被固定为−2^31
,大于2^31 − 1
的整数应该被固定为2^31 − 1
。 - 返回整数作为最终结果。
注意:
- 本题中的空白字符只包括空格字符
' '
。 - 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
3.2 题目解析
一个整数我们可以分成2个部分:1. 符号字符(或者没有) +/- 2.数字字符,我们先判断是否存在正负号,然后读取数字字符,按位相加,同时看看是否超过限制就能达到我们的目的
3.3 题解
func myAtoi(s string) int {
ans := 0
sign := 0
for i := range s {
switch {
case s[i] == ' ' && sign == 0: //当前空格,并且之前还未出现符号
case s[i] == '+' && sign == 0: //当前+,并且之前未出现符号
sign = 1
case s[i] == '-' && sign == 0: //当前-,并且之前未出现符号
sign = -1
case s[i] <= '9' && s[i] >= '0' && sign == 0: //当前数字字符,并且之前未出现符号
sign = 1
ans = ans*10 + int(s[i]-'0')
case s[i] <= '9' && s[i] >= '0' && sign != 0: //当前数字字符,并且之前出现符号
ans = ans*10 + int(s[i]-'0')
if sign*ans > math.MaxInt32 { //当前数字字符超过最大值截断
return math.MaxInt32
}
if sign*ans < math.MinInt32 { //当前数字字符小于最大值截断
return math.MinInt32
}
default: //其他情况
return sign * ans
}
}
return sign * ans
}
3.4 涉及基础语法
函数,分支选择结构,循环结构,数据范围(int当前是64位的,这个在第3章分析过leetcode是64位操作系统),字符串
4 本章小结
我们通过简单题和中等题的解答可以看到使用Leetcode等OJ学习语言的基础语法会变得很简单,而且成本很低。语法错误,程序正确性均由Leetcode去判定,可以提高我们的逻辑思辨能力和考虑问题的全面性,哪怕是像本次举例的题目那样简单的需求。
你别看我是很简单地写出了题解,事实上我在这些题目上面翻过不少车
如本次的中等题
6.使用leetcode去练习语言的更多相关文章
- 《通过刷leetcode学习Go语言》之(1):序言
Author : Email : vip_13031075266@163.com Date : 2021.03.07 Version : 北京 C ...
- leetcode学习笔记--开篇
1 LeetCode是什么? LeetCode是一个在线的编程测试平台,国内也有类似的Online Judge平台.程序开发人员可以通过在线刷题,提高对于算法和数据结构的理解能力,夯实自己的编程基础. ...
- LeetCode 刷题指南(1):为什么要刷题
虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...
- 用golang刷LeetCode
用golang刷LeetCode 用Go语言刷LeetCode记录,只是为了练习Go语言,能力有限不保证都是最优解,只能在此抛转引玉了. 数据结构和算法 数据结构和算法是程序员的命根子,没了命根子也就 ...
- 转 Eric Raymond对于几大开发语言的评价
原文见:http://blog.jobbole.com/79421/ [译注]:Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大 ...
- C语言学习笔记之成员数组和指针
成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下. 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...
- 诞生于饭桌上的jcSQL语言
相信每个Coder都有心在自己求学阶段可以写一门自己的语言,无论是毕业设计,还是课余爱好:不管是为了提升B格,还是想练手,抑或对其他语言不满,想自己撸一个,只要坚持下去了,都是不错的理由. 现在正值暑 ...
- 浅析NopCommerce的多语言方案
前言 这段时间在研究多语言的实现,就找了NopCommerce这个开源项目来研究了一下,并把自己对这个项目的粗浅认识与大家分享一下. 挺碰巧的是昨天收到了NopCommerce 3.90 发布测试版的 ...
- 跨语言学习的基本思路及python的基础学习
笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发.但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的 ...
- 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good
最近在学习Qt但由于没有C++的基础,感觉学的很吃力.看到pongba的这篇文章感觉不错就弄过来了, 原文地址:http://blog.csdn.net/qter_wd007/article/deta ...
随机推荐
- 当使用POI打开Excel文件遇到out of memory时该如何处理?
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 当我们开发处理Excel文件时,Apache POI 是许多人 ...
- 用写代码的方式画图-试下PlantUML吧
1 序言 所谓一图胜千言,大家平日在工作中编写文档时,往往都需要画各种图来表达中心思想,比如流程图.时序图.UML 图,很多人选择使用 Axure .PrecessOn.Diagrams(darw.i ...
- ChatGPT「代码解释器」正式开放,图片转视频仅需30秒!十大令人震惊的魔法揭秘
经过超过三个月的等待,ChatGPT「代码解释器」终于全面开放.这是一大波神奇魔法的高潮. OpenAI的科学家Karpathy对这个强大的代码解释器测试版赞不绝口.他把它比作你的个人数据分析师,可以 ...
- CF371D Vessels题解
思路: 定义一个权值并查集,权值保存这个集合还可以存下多少水. 如果这个集合可以存放的水已经小于要装入的水,就将这个集合与下一个集合合并. 否则,直接把这个集合可以存放的水减去要装入的水的体积. 代码 ...
- 【原创】CPU性能优化小记
CPU性能优化小记 目录 CPU性能优化小记 一.现象 TOP各指标含义 二.分析 启动应用前 启动应用后 采集内核函数的方法 内核采集分析 火焰图分析 三.解决 一.现象 业务线反馈,单板只要一跑我 ...
- windows内核情景分析-毛德操(第一章)
微内核操作系统的特点内核尽量缩小 windows内核包括了两大部分 操作系统内核(ntoskrnl.exe),另一部分则是迁移到了内核中即系统空间中的视窗服务(win32k.sys) 用户空间和系统空 ...
- vulnhub billu:b0x
知识点 SQLi.目录爆破.数据库操作.文件包含漏洞.提权.反弹shell 解题步骤 nmap扫描有80,22端口 nmap -sV -Pn -T 4 192.168.220.132 访问网页提示sq ...
- Postgresql: 常用配置
允许远程链接postgresql 要允许 PostgreSQL 数据库允许远程连接,需要进行以下配置步骤: 打开 PostgreSQL 的主配置文件 postgresql.conf.通常,该文件位于以 ...
- Pandas: 将dataframe转换为dict
背景 将Dataframe的每一列数据转换成字典并保存.也就是字段名变为key, 数值变为value. 方案 以下是效果图 参考链接 https://blog.csdn.net/hanyunkaka/ ...
- nuitka 将程序编译为单个exe
原文链接:https://github.com/Nuitka/Nuitka 在Windows上,有两种模式,一种是将其复制到您公司指定的AppData,也将其用作缓存,另一种是在临时目录中进行.您需要 ...