[Go版]算法通关村第十二关青铜——不简单的字符串转换问题

news/2024/4/23 22:23:23/

目录

  • 题目:转换成小写字母
    • 思路分析:大写字母ASCII码 + 32 = 小写字母ASCII码
    • Go代码
    • Go代码-优化: 大写字母ASCII码 | 32 = 小写字母ASCII码
  • 题目:字符串转换整数(atoi)
    • 思路分析:去除首部空格 + 明确正负 + 读取数字 + 判断越界
    • Go代码

题目:转换成小写字母

题目链接:LeetCode-709. 转换成小写字母
在这里插入图片描述

思路分析:大写字母ASCII码 + 32 = 小写字母ASCII码

  • 大写字母 A - Z 的 ASCII 码范围为 [65,90]
  • 小写字母 a - z 的 ASCII 码范围为 [97,122]
    所以,只要字符的ASCII码再[65,90]的范围内,将它增加32即可得到对应的小写字母。

Go代码

func toLowerCase(s string) string {ret := make([]rune, len(s))for i, v := range s {if v >= 'A' && v <= 'Z' {ret[i] = v + 32} else {ret[i] = v}}return string(ret)
}

Go代码-优化: 大写字母ASCII码 | 32 = 小写字母ASCII码

[65,90]对应的二进制表示为[ (01000001)2,(01011010)2 ]
32对应的二进制表示为 (00100000)2
对于[ (01000001)2,(01011010)2 ] 内的所有数,表示32的那个二进制位都是0,所以可以对其ASCII码与32做按位或运算,替代与32的加法运算

上面使用了[]rune切片来存储新的字符,这里我们换种写法,使用strings.Builder来构建字符串

func toLowerCase(s string) string {str := &strings.Builder{}str.Grow(len(s))for _, v := range s {if v >= 65 && v <= 90 {str.WriteRune(v | 32)} else {str.WriteRune(v)}}return str.String()
}

题目:字符串转换整数(atoi)

题目链接:LeetCode-8. 字符串转换整数 (atoi)
在这里插入图片描述

思路分析:去除首部空格 + 明确正负 + 读取数字 + 判断越界

  1. 去除首部空格:== ’ ’ 就跳过
  2. 明确正负:默认为1,如果第一个有效字符== ‘-’ 就是-1
  3. 读取数字:
    • 字符 0-9 的 ASCII 码范围为 [48,57],所以通过字符的 ASCII 码值减去 48 可获得相应的数字
    • 值的拼装为 res = res * 10 + v * sign
  4. 判断越界:
    • 超过最大值:res > (math.MaxInt32-v) / 10
    • 小于最小值:res < (math.MinInt32+v) /10

Go代码

func myAtoi(s string) int {ret := 0i := 0length := len(s)sign := 1// 去除首部空格for _, v := range s {if v == ' ' {i++} else {break}}// 获得+-if i < length && (s[i] == '+' || s[i] == '-') {sign = getSign(s[i])i++}// 读取数字for i<length {if s[i] >= '0' && s[i] <= '9' {v := getIntByChar(s[i])// 判断越界问题if MoreThanMax(ret, v) || LittleThanMin(ret, v) {if sign == 1 {return math.MaxInt32}return math.MinInt32}ret = ret*10 + sign*vi++} else {return ret}}return ret
}
func getSign(str byte) int {if str == '-' {return -1}return 1
}
func getIntByChar(ch byte) int {return int(ch-'0')
}
func MoreThanMax(ret, v int) bool {if ret > (math.MaxInt32-v)/10 {return true}return false
}
func LittleThanMin(ret, v int) bool {if ret < (math.MinInt32+v)/10 {return true}return false
}

http://www.ppmy.cn/news/1038540.html

相关文章

draw.io导出矢量图到word报错text is not svg - cannot display

先参考https://blog.csdn.net/a625750076/article/details/126384831 如果不行&#xff0c;可能是转存的问题 解决方法&#xff1a;直接在draw.io上操作 第一步 第二步 然后再word中粘贴&#xff0c;依旧是矢量图哦&#xff01;

不同版本Idea部署Maven和Tomcat教学

目录 一、2019版Idea 1.1. Maven配置 1.2. Tomcat配置 二、2023版Idea 2.1 Maven配置 2.2. Tomcat配置 一、2019版Idea 1.1. Maven配置 在这篇 http://t.csdn.cn/oetKq 我已经详细讲述了Maven的下载安装及配置&#xff0c;本篇就直接开始实操 : 1. 首先进入设置搜索Mave…

npm的镜像源和代理的查看和修改

一、镜像源 查询当前镜像源 npm get registry 设置为淘宝镜像 npm config set registry http://registry.npm.taobao.org/ 设置回默认的官方镜像 npm config set registry https://registry.npmjs.org/ 设置electron为淘宝镜像 npm config set ELECTRON_MIRROR "h…

springboot艰难版本升级之路!! springboot 2.3.x版本升级到2.7.x版本

文章目录 1.缘起1.1 升级到版本2.7.12启动失败,而且没有报错信息1.2 application-dev.yml 配置加载问题1.3 openfeign依赖问题汇总1.4 datasource报错1.5 MySQL驱动升级1.6 循环依赖报错1.7 跨域错误临时总结1.缘起 由于服务需要搭建链路追踪, 需要把springboot版本升级到2.7.1…

Vue实现动态可视化

1、可视化效果&#xff1a; 水晶球环绕地球旋转&#xff1b; 2、实现 <template><div class"container"><div class"header-body"><div class"header-left"></div><div class"header-title">网…

PHP实现读取指定目录下的所有文件

在php中读取指定目录下的文件主要用到了opendir和readdir函数 一&#xff1a;opendir(打开目录句柄) 1&#xff1a;语法 opendir(path,context); 2&#xff1a;参数说明 参数描述path必需。规定要打开的目录路径。context可选。规定目录句柄的环境。context 是可修改目录流…

c++通过gsop调用基于https的webservice接口总结

ww哦步骤&#xff1a; 第一步&#xff1a;生成头文件 webservice接口一般会有一个对外接口文档。比如&#xff1a;http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL 问号后面的参数表示WSDL文档&#xff0c;是一个XML文档&#xff0c;看不懂配置没关系&a…

【数据分析入门】Numpy进阶

目录 一、数据重塑1.1 透视1.2 透视表1.3 堆栈/反堆栈1.3 融合 二、迭代三、高级索引3.1 基础选择3.2 通过isin选择3.3 通过Where选择3.4 通过Query选择3.5 设置/取消索引3.6 重置索引3.6.1 前向填充3.6.2 后向填充 3.7 多重索引 四、重复数据五、数据分组5.1 聚合5.2 转换 六、…

魔棒:手机智能无人直播软件多少钱?

无人直播因为直播门槛低&#xff0c;不需要真人出镜&#xff0c;不需要请主播&#xff0c;加上可以24小时直播卖券&#xff0c;效果出奇的好&#xff0c;一时很受广大商家的欢迎&#xff0c;那么&#xff0c;这种ai智能无人直播软件究竟多少钱呢&#xff1f; 当然&#xff0c…

三分之一的英国大学生被欺诈

根据NatWest的一项新研究&#xff0c;去年英国大学三分之一的学生在网上遭遇欺诈。 今年5月&#xff0c;这家高街银行委托咨询公司RedBrick对来自63个城镇的3000多名英国大学生进行了调查。 尽管三分之一的受访者表示他们在过去的12个月里遇到过诈骗&#xff0c;但没有统计数…

最新苹果CMS海螺模版V20修复版源码 加广告代码

最新苹果】cms海螺模版V20修复版源码 加广告代码 修复说明&#xff1a; 修复多线路时播放页列表点其他线路还是播放默认线路的问题 修复前台黑白切换和字体颜色切换失效 修复微信二维码没有对接苹果控制后台问题 优化换一换功能的图片加载速度 修复PC页面下滑空白问题 修…

在进行自动化测试,遇到验证码的问题,怎么办?

1.找开发去掉验证码或者使用万能验证码 2.使用OCR自动识别 使用OCR自动化识别&#xff0c;一般识别率不是太高&#xff0c;处理一般简单验证码还是没问题 这里使用的是Tesseract-OCR,下载地址&#xff1a;https://github.com/A9T9/Free-Ocr-Windows-Desktop/releases 怎么使…

2023国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

GRPC 链接 NODE 和 GOLANG

GRPC 链接 NODE 和 GOLANG GRPC 了解 什么是GRPC gRPC 采用了 Protocol Buffers 作为数据序列化和反序列化的协议&#xff0c;可以更快速地传输数据&#xff0c;并支持多种编程语言的跨平台使用gRPC 提供“统一水平层”来对此类问题进行抽象化。 开发人员在本机平台中编写专…

前端练手小项目--自定义时间(html+css+js)

自定义时间 写文章的因 关于要写这篇文章的原因 是记录在工作上遇到的困难需求&#xff0c;是希望能给大家提供一些解决问题的思路 接下来我描述这个需求的多样性&#xff0c;难点在哪。 勾选勾选框开始时间与结束时间默认显示昨天与今天。取消勾选框开始时间与结束时间清空。…

迁移学习系列--半监督

目前追踪的代码库如下: Transfer-Learning-Library Semi-supervised-learning TorchSSL 包含算法: (2015 NeurIPS ) PiModel [1] (2017 NeurIPS ) MeanTeacher[2] (2013 ICML ) PseudoLabel [3] (2018TPAMI ) VAT (Virtual adversarial training)[4] (2019 NeurIPS) M…

python中通过汉宁窗傅里叶变换进行设备故障诊断 从而预测设备故障

python中通过汉宁窗傅里叶变换进行设备故障诊断 从而预测设备故障 使用汉宁窗傅里叶变换可以帮助我们分析设备的频率特性&#xff0c;从而识别出可能的故障模式。然而&#xff0c;仅靠这种分析方法并不能直接预测设备故障。为了实现故障预测&#xff0c;我们还需要结合其他方法…

Android 13像Settings一样获取热点和网络共享

一.背景 由于客户定制的Settings里面需要获取到热点和网络共享状态,所以需要实现此功能。 目录 一.背景 二.前提条件 三.调用api 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍…

python 各种疑难杂包安装方法与踩坑记录

常用招数&#xff1a; 网络问题&#xff1a;切换网络线路/开关科学、启用/不用国内镜像 包找不到&#xff1a;启用/不用国内镜像、尝试conda、pip、source等多种安装方式 gdal、rasterio 参考链接&#xff1a; python rasterio库安装具体流程 - 知乎 Python安装gdal,raster…

文件批量改名,一键将西班牙语文件批量改名为中文!

亲爱的用户们&#xff0c;您是否经常面对大量以西班牙语命名的文件&#xff0c;需要将其转换为中文&#xff1f;手动逐个改名无疑是一项繁琐且耗时的任务。现在&#xff0c;我们为您带来一款便捷的简繁转换工具&#xff0c;让您一键将西班牙语文件批量改名为中文&#xff01; …