1 本章预览

事实上本章并不会去讲述go语言的基础情况,而是去介绍如何使用Leetcode去帮助我们去学习go语言的基本语法,当然本章的内容也适合于其他语言。

Leetcode是一个很好的在线判题系统(Online Judge,OJ),它几乎支持所有主流语言的学习,例如C/C++,Java,Python, Go, JavaScript等等。

使用Leetcode学习编程语言有以下好处:

  1. 提供实时反馈:在线判题系统可以立即对提交的程序进行编译和执行,并返回结果,这有助于学习者及时了解自己的代码是否正确,以及程序的运行时间和内存使用情况。
  2. 自动评测:在线判题系统可以自动判断程序的正确性,这使得学习者可以专注于编写代码的逻辑,而不必担心测试和调试的问题。
  3. 适合初学者:对于初学者来说,在线判题系统提供了一个安全、可靠的环境,让他们可以自由地尝试和练习编程,不用担心会破坏或影响其他程序。
  4. 自我挑战:在线判题系统通常会有一些难度不一的题目,学习者可以通过解决这些问题来提高自己的编程技能和解决问题的能力。
  5. 社区支持:在线判题系统通常有一个社区功能,学习者可以在这里与其他人交流、分享代码和经验,这有助于提高学习者的编程技能和编程兴趣。

总之,使用在线判题系统学习编程语言可以帮助学习者提高编程技能、解决问题能力和编程兴趣。

2 简单题举例

2.1 题目描述

13. 罗马数字转整数

罗马数字包含以下七种字符: 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 题目描述

8. 字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2^31 的整数应该被固定为 −2^31 ,大于 2^31 − 1 的整数应该被固定为 2^31 − 1 。
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' ' 。
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

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去练习语言的更多相关文章

  1. 《通过刷leetcode学习Go语言》之(1):序言

    Author       : Email         : vip_13031075266@163.com Date          : 2021.03.07 Version     : 北京 C ...

  2. leetcode学习笔记--开篇

    1 LeetCode是什么? LeetCode是一个在线的编程测试平台,国内也有类似的Online Judge平台.程序开发人员可以通过在线刷题,提高对于算法和数据结构的理解能力,夯实自己的编程基础. ...

  3. LeetCode 刷题指南(1):为什么要刷题

    虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会.现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 ...

  4. 用golang刷LeetCode

    用golang刷LeetCode 用Go语言刷LeetCode记录,只是为了练习Go语言,能力有限不保证都是最优解,只能在此抛转引玉了. 数据结构和算法 数据结构和算法是程序员的命根子,没了命根子也就 ...

  5. 转 Eric Raymond对于几大开发语言的评价

    原文见:http://blog.jobbole.com/79421/ [译注]:Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大 ...

  6. C语言学习笔记之成员数组和指针

    成员数组和指针是我们c语言中一个非常重要的知识点,记得以前在大学时老师一直要我们做这类的练习了,但是最的还是忘记了,今天来恶补一下.     单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个 ...

  7. 诞生于饭桌上的jcSQL语言

    相信每个Coder都有心在自己求学阶段可以写一门自己的语言,无论是毕业设计,还是课余爱好:不管是为了提升B格,还是想练手,抑或对其他语言不满,想自己撸一个,只要坚持下去了,都是不错的理由. 现在正值暑 ...

  8. 浅析NopCommerce的多语言方案

    前言 这段时间在研究多语言的实现,就找了NopCommerce这个开源项目来研究了一下,并把自己对这个项目的粗浅认识与大家分享一下. 挺碰巧的是昨天收到了NopCommerce 3.90 发布测试版的 ...

  9. 跨语言学习的基本思路及python的基础学习

    笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发.但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的 ...

  10. 你应当如何学习C++以及编程(细节是必要的,但不是重要的,把时间用在集中精力去解决问题,而不是学习新技术,那样练不成高手。在实践中提高才是最重要的。最最重要的内功还是长期学习所磨练出来的自学能力)good

    最近在学习Qt但由于没有C++的基础,感觉学的很吃力.看到pongba的这篇文章感觉不错就弄过来了, 原文地址:http://blog.csdn.net/qter_wd007/article/deta ...

随机推荐

  1. decode php解密代码,方便好用,请收藏

    <?php //已经加密的文件内容 $a = "eval(gzinflate(base64_decode('tVRNb+IwEL3vr/AhwomU5WOPVHSF2lSg7QJK0j ...

  2. JVM之指针压缩

    做java开发的同学一般都比较熟悉JVM,那么关于指针压缩这块内容是不是也了解呢,不熟悉的小伙伴往下看吧. 首先说明,本文涉及的JDK版本是1.8,JVM虚拟机是64位的HotSpot实现为准. ja ...

  3. JS逆向实战20——某头条jsvm逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 网站 目标网站:aHR0c ...

  4. 基于Surprise协同过滤实现短视频推荐

    ​ 前言 前面一文介绍了通过基础的web项目结构实现简单的内容推荐,与其说那个是推荐不如说是一个排序算法.因为热度计算方式虽然解决了内容的时效质量动态化.但是相对用户而言,大家看到的都是几乎一致的内容 ...

  5. VueJS使用addEventListener的事件如何触发执行函数的this

    1.使用浏览器监听切屏为例 此处为考虑浏览器兼容性推荐使用:document.addEventListener 1.1.正常函数使用如下: let n = 0; let max = 3; // 切屏最 ...

  6. Windows 下搭建 Appium + Android+python 自动化测试环境

    前言 本来并不打算写这么一篇文章,但是实践下来发现网上的各种教程里大致有两个问题.一是文章有些跟不上时代,目前android开发和测试的技术更新都比较快,内容有些过期.二是细节部分不是太完整,拼拼凑凑 ...

  7. 青少年CTF平台-Web-Flag在哪里

    平台名称:青少年CTF训练平台 题目名称:Flag在哪里? 解题过程: 启动环境,需要等待大概20秒左右的时间. 访问,页面显示Flag反正不在这. 右键网页,发现无法使用右键. 那么我们直接F12 ...

  8. 重学JavaScript Promise API

    在这篇教程中,我们将掌握如何在JavaScript中创建并使用Promise.我们将了解Promise链式调用.错误处理以及最近添加到语言中的一些Promise静态方法. 什么是Promise? 在J ...

  9. .Net AsyncLocal介绍

    AsyncLocal的基本概念 AsyncLocal是一个在异步环境中存储和传递状态的类型.它允许你在线程或任务之间共享数据,而不会受到异步上下文切换的影响. 每一个异步的AsyncLocal的数据都 ...

  10. CSS实现文字描边效果

    一.介绍最近在一个项目的宣传页中,设计师使用了文字描边效果,之前我确实没有实现过文字的描边效果,然后我在查阅资料后,知道了实现方法.文字描边分为两种:内外双描边和单外描边,也就是指在给文字加上描边效果 ...