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

news2025/1/17 0:52:15

目录

  • 题目:转换成小写字母
    • 思路分析:大写字母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 := 0
    i := 0
    length := 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*v
            i++
        } 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.coloradmin.cn/o/888561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Java实现拼音模糊搜索功能(支持拼音、首字母、多音字、谐音字、汉字、阿拉伯数字)

&#x1f34e; 介绍 Java实现的简单的工具类支持(拼音, 多音字, 谐音字, 汉字, 阿拉伯数字) 对标阿里钉钉的上方搜索栏实现的 &#x1f349; 对应依赖 <!-- https://mvnrepository.com/artifact/com.github.open-android/pinyin4j --> <dependency><groupId&g…

视觉大模型综述

万字长文带你全面解读视觉大模型细数近期涌现的优秀视觉大模型工作https://mp.weixin.qq.com/s/jLQaguLejx9zXjZjaJWx-Q深入了解视觉语言模型 - 知乎人类学习本质上是多模态 (multi-modal) 的&#xff0c;因为联合利用多种感官有助于我们更好地理解和分析新信息。理所当然地&am…

uniapp 顶部头部样式

<u-navbartitle"商城":safeAreaInsetTop"true"><view slot"left"><image src"/static/logo.png" mode"" class"u-w-50 u-h-50"></image></view></u-navbar>

TIA博途_通过EXCEL快速给PLC程序段添加注释信息的方法示例

通过EXCEL快速给PLC程序段添加注释信息的方法示例 如下图所示,以OB1为例,正常情况下,我们可以在博途中直接输入各个程序段的注释信息, 但是如果程序段较多的话,逐个输入的话效率不高,此时可以参考下面这种通过EXCEL进行快速添加的方法。 如下图所示,选中某个OB或FC、FB块…

蓝牙资讯|2023年Q2蓝牙耳机市场报告发布,苹果依然占据第一

市场调查机构 Canalys 发布最新报告&#xff0c;2023 年第二季度全球个人智能音频设备&#xff08;包括 TWS, 无线头戴&#xff0c;无线颈挂&#xff09;下滑了 2%&#xff0c;出货量达到 9568 万部&#xff0c;基本追平去年同期。其中&#xff0c;真无线耳机&#xff08;TWS&a…

出现ffmpeg.dll丢失的修复方法分享,教你快速修复ffmpeg.dll文件

当你使用或尝试运行与FFmpeg相关的应用程序时&#xff0c;可能会遇到一个常见的问题&#xff0c;ffmpeg.dll文件丢失。这个动态链接库文件对于正常运行FFmpeg应用程序至关重要。在本文中&#xff0c;我们将详细探讨为什么会出现ffmpeg.dll丢失的情况&#xff0c;并提供一些修复…

互联网账号被封禁解决办法,以qq为例

百度搜索&#xff1a;互联网信息服务投诉平台 电脑端浏览器&#xff1a;打开 ts.isc.org.cn 推荐使用360极速浏览器 谷歌浏览器 提交完成后&#xff0c;将投诉码保存&#xff0c;可以在“查询评价”处用投诉码查询进度

什么是可视化编程?为什么它如此重要?

可视化编程&#xff0c;又叫可视化程序设计&#xff0c;一直以来就是备受讨论的“热门技术”。一方面&#xff0c;程序员抵触它&#xff0c;觉得它不如用代码开发。另一方面&#xff0c;对于产品经理等稍微懂点开发的业余人员&#xff0c;它确实能提供价值。所以&#xff0c;它…

第十课:Qt 字符编码和中文乱码相关问题

功能描述&#xff1a;最全的 Qt 字符编码相关知识以及中文乱码的原因与解决办法 一、字符编码种类 ASCII 码 美国人对信息交流的编码&#xff0c;包括 26 个字母&#xff08;大小写&#xff09;、数字和标点符号等&#xff0c;用一个字节&#xff08;8 位&#xff09;表示这些…

【Matter】基于Ubuntu 22.04搭建matter开发环境:chip-tool 配网之 matter-over-wifi

前言 主要是记录一下学习过程&#xff0c;梳理下思路&#xff0c;抛转~ 官方的开发环境&#xff0c;基于Linux版本&#xff0c;官方的环境是基于树莓派环境的&#xff0c;原理其实也比较明了&#xff0c;目的也比较明确&#xff0c;就是达到Linux 主机和wifi 路由在同一局域网…

四天两次盛会,西凤以品质和信仰深度诠释凤香价值

上周&#xff0c;西凤无疑是白酒圈的热点。 8月8日&#xff0c;在中国酿酒原料及品质安全研究院科技创新论坛暨西凤酒项目成果发布会上&#xff0c;《凤香型酒用高粱品种培育及抗逆高产技术集成示范》与《西凤酒原产地地质地理环境特征研究》研究成果被重磅发布。 8月11日&…

爬虫逆向实战(十二)--某交易所登录

一、数据接口分析 主页地址&#xff1a;某交易所 1、抓包 通过抓包可以发现登录是通过表单提交的 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块&#xff0c;可以发现有两个加密参数password和execution 请求头是否加密&#xff1f; 无响应是…

leader-line相关配置问题

安装完两个插件都是教去改config // configureWebpack: config > {// let path require(path)// config.module.rules.push({// test: path.resolve(__dirname, node_modules/leader-line/),// use: [// {// loader: skeleton-loader,// …

校企合作谋发展 合作共赢谱新篇|云畅科技与湖南民族职业学院签订校企合作协议

产业是经济发展的重要引擎&#xff0c;人才是产业发展的重要资源。为积极探索软件人才培育新路径&#xff0c;共商政产学研协同新机制&#xff0c;8月8日&#xff0c;云畅科技与湖南省民族职业学院教育技术学院软件技术专业签订校企合作协议。 会上&#xff0c;学院副校长王志平…

uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2)

1、网页授权&#xff0c;获取code 代码&#xff1a; oauthUrl() {const that thisuni.removeStorageSync(code)let REDIRECT_URI encodeURIComponent(window.location.href)let CORPID webConfig.appIdlet url https://open.weixin.qq.com/connect/oauth2/authorize?appi…

keil编译链接文件警告Pattern *.o(RAMCODE) only matches removed unused sections

问题&#xff1a; 从提示看是链接文件中&#xff0c;RAM中原先分配给代码存储的空间没有用上 解决办法&#xff1a;删除掉上图中红框里面代码&#xff1b;

途乐证券-宁德时代发力超充赛道,高压快充概念强势拉升,泰永长征涨停

高压快充概念17日盘中强势拉升&#xff0c;到发稿&#xff0c;泰永长征涨停&#xff0c;万祥科技涨超9%&#xff0c;英可瑞涨逾8%&#xff0c;迦南智能涨超4%。 消息面上&#xff0c;8月16日&#xff0c;宁德时代举行线下新品发布会&#xff0c;正式发布全球首款磷酸铁锂4C超充…

股票交易c接口包含哪些调用函数?

股票交易的C接口中可能包含多个调用函数&#xff0c;具体的调用函数取决于所使用的接口规范和交易所的要求。接下来看看下面是一些可能常见的股票交易C接口调用函数的示例&#xff1a; 1. 连接函数&#xff08;Connect&#xff09;&#xff1a;用于与交易所建立网络连接。 2.…

python3.73安装教程,python3.10安装教程

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python3.73安装教程&#xff0c;python3.10安装教程&#xff0c;现在让我们一起来看看吧&#xff01; Python目前已支持所有主流操作系统&#xff0c;在Linux,Unix,Mac系统上自带Python环境&#xff0c;一般默认装的是P…