首页 > 其他分享 >6.使用leetcode去练习语言

6.使用leetcode去练习语言

时间:2023-10-21 17:11:13浏览次数:40  
标签:字符 题目 语言 练习 整数 sign ans leetcode 数字

目录

1 本章预览

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

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

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

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

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

2 简单题举例

2.1 题目描述

13. 罗马数字转整数

罗马数字包含以下七种字符: IVXLCDM

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II27 写做 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去判定,可以提高我们的逻辑思辨能力和考虑问题的全面性,哪怕是像本次举例的题目那样简单的需求。

你别看我是很简单地写出了题解,事实上我在这些题目上面翻过不少车

如本次的中等题

标签:字符,题目,语言,练习,整数,sign,ans,leetcode,数字
From: https://www.cnblogs.com/onlyac/p/17779231.html

相关文章

  • 软考上午03程序语言
    机器语言汇编语言统称为低级语言。机器语言即01组成的序列汇编语言即用符号表示指令语言编译执行:执行效率高,占用资源小但是兼容性差解释执行:可移植性好,开发速度快,与用户通信方便,但是效率低 编译过程分为六个阶段:词法分析,语法分析,语义分析,中间代码生......
  • 今天老师讲了c语言不过还好听懂了,希望以后能再接再厉吧
    #include<stdio.h>intmain(){ charc1,c2,c3,c4,c5; c1='C'; c2='h'; c3='i'; c4='n'; c5='a'; c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4; printf("%c......
  • C语言数据类型占用字节大小+modport存在的意义+传输延迟和惯性延迟+上下拉+forwarding
    C语言数据类型占用字节大小最大整形宽度是8字节。modport存在的意义似乎modport的存在没有意义了。只是将信号变得更冗长。但是又是有意义的,因为modport里的赋值变化是没有延迟的,而clocking受到配置的影响。https://blog.csdn.net/hh199203/article/details/127230498传输......
  • 【Cpp 语言基础】vector<int>::size_type死循环问题
    今天写了一个将数组倒序打印出来的程序,用到了vector<int>::size_type类型但是出现了错误。错误的原因:size_type是unsignedint类型不会减为负值。在for()循环index--下,由于size_type永不为负,index>=0永远成立。 解决办法:索引改为int类型。voidfunction(constvector<i......
  • TCL脚本语言学习
    前言  TCL(ToolCommandLanguage)命令的格式是命令+字符串,第一个是命令,后面都是字符串,tcl的解释器(逐行执行)会根据命令去对后面的字符串进行相关操作。注释符号:#一、安装启动tcl命令行,以%开头sudoaptinstalltcl//安装tcltclsh//启动tcl%二、变量列表1、置换subtitutio......
  • C语言 运算符
    大家好,欢迎来大家参考我的文章,学习任何一门语言都非常需要强大的实践能力,理论知识,学习C语言是个很漫长的过程,学习到后面还需要算法数据结构的支撑,再到后面大家就可以尝试一些比赛:蓝桥杯...检验自己的实力,这是我的第二篇文章,我呢一直在以白话文方式,少使用编程语言术语,让更好理解C语......
  • 算法训练day39LeetCode738.968.
    算法训练day39LeetCode738.968.738.单调递增的数字题目738.单调递增的数字-力扣(LeetCode)题解代码随想录(programmercarl.com)classSolution{public:intmonotoneIncreasingDigits(intn){stringstrNum=to_string(n);//int转换string......
  • 小程序底层技术机制解读 - JavaScript编程语言
    JavaScript是小程序的核心编程语言之一,它在小程序中起着至关重要的作用。本文将深入探讨JavaScript在小程序底层技术机制中的作用,以及如何利用JavaScript来构建小程序应用。同时,我们还将提供一个简单的代码演示,以帮助读者更好地理解JavaScript在小程序中的应用。JavaScript在小程序......
  • 基于Go语言跟我一起写DApp-转型区块链应用开发推荐课程GoSDK+Fisco-Bcos
    基于Go语言跟我一起写DApp-转型区块链应用开发推荐课程GoSDK+Fisco-Bcos0介绍学习目标:1、理解什么是区块链;2、掌握区块链基本结构;3、构建区块链基本模型;理论部分:1、区块链七层架构模型;2、区块链链式结构;实践部分:1、创建区块;2、创建区块的“链”;3、访问区块链;开发环境:GoL......
  • [LeetCode] 1726. Tuple with Same Product
    Givenanarray nums of distinct positiveintegers,return thenumberoftuples (a,b,c,d) suchthat a*b=c*d where a, b, c,and d areelementsof nums,and a!=b!=c!=d.Example1:Input:nums=[2,3,4,6]Output:8Explanation:Ther......