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 ...
随机推荐
- EtherCAT 转CCLINK网关连接三菱plc应用案例
EtherCAT 现场总线协议是由德国倍福公司在 2003 年提出的,该通讯协议拓扑结构十分灵活,数据传输速度快,同步特性好,可以形成各种网络拓扑结构. 捷米特JM-ECT-CCLK 是自主研发的一 ...
- 了解web网络基础
TCP/IP 协议:一种规则,规定不同计算机操作系统,硬件之间怎么通信的一种规则 像这样把互联网相关联的协议集合起来总称为TCP/IP协议. TCP/IP分层管理 按照组层次分为以下四层: 应用层:决 ...
- Isito 入门(四):微服务可观测性
本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 可观测性 通过 Gateway 访问 Kiali 查看链路追踪数据 可能失败的原因 修复 Kiali Grafa ...
- Spring6 初始
Spring6 初始 @ 目录 Spring6 初始 每博一文案: 1. 初始 Spring6 1.1 OCP开闭原则 1.2 依赖倒置原则DIP 1.3 控制反转IoC 2. Spring 初始 2 ...
- 平时容易忽视的地方之一:java在抽取方法时,什么时候该用void
当一个类中多个方法有相同编码,或该部分编码可以作为一个整体,适合抽取出一个方法时,要注意这个抽取的方法的返回值,什么时候可以用void,什么时候不能用void? 先看代码: import lombok ...
- FAQ:zabbix 频繁丢失数据问题分析处理
问题描述 在grafana上看到历史数据的绘图断断续续. 问题分析 1 性能瓶颈 一开始以为是哪里的性能遇到瓶颈,把服务器和zabbix的监控数据看了一遍,各个指标都没有问题. 2 上网百度 没有找到 ...
- rsync 命令
linux上的rsync命令详解 15个rsync命令实施 -z: --compress 使用压缩机制 -v: --verbose 打印详细信息 -r: --recursive 以递归模式同步子目录 ...
- Win10 下 tensorflow-gpu 2.5 环境搭建
Win10 下 tensorflow-gpu 2.5 环境搭建 简介 机器学习环境搭建,tensorflow_gpu-2.5.0 + CUDA 11.2 + CUDNN 8.1 :环境必须是这个,具体 ...
- 【技术实战】Vue技术实战【五】
需求实战一 效果展示 代码展示 <template> <div class="home-component"> <div class="pr ...
- 你真的知道吗?catch、finally和return哪个先执行
我的一位朋友前阵子遇到一个问题,问题的核心就是try--catch--finally中catch和finally代码块到底哪个先执.这个问题看起来很简单,当然是"catch先执行.final ...