1. 题目
https://leetcode.cn/problems/string-to-integer-atoi/submissions/428764685/
LeetCode 8 是一道字符串转换整数的题目,
考查的是如何处理各种边界情况和异常输入,比如空格、正负号、非数字字符、溢出等
2. 解法
解法思路:
- 首先,使用trim()方法去除字符串s的开头和结尾的空格。
- 然后,判断字符串是否为空,如果为空,就返回0。
- 接着,判断字符串的第一个字符是否是正负号,如果是,就记录下符号,并将索引index加一,跳过这个字符。如果不是,就默认为正号。
- 然后,使用一个循环遍历字符串的剩余字符,每次取出一个字符c,并进行以下操作:
- 判断c是否是数字,如果不是,就跳出循环,结束转换。
- 判断当前的结果result是否会溢出整数范围,如果是,就根据符号返回最大值或最小值。
- 将c转换为数字,并将result乘以10再加上c,得到新的结果。
- 将索引index加一,继续下一个字符。
- 最后,将结果result乘以符号sign,并返回。
具体实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | class Solution { public int myAtoi(String s) { // 去除空格 s = s.trim(); // 判断是否为空 if (s.length() == 0 ) { return 0 ; } // 判断正负号 int sign = 1 ; int index = 0 ; if (s.charAt( 0 ) == '+' ) { index++; } else if (s.charAt( 0 ) == '-' ) { sign = - 1 ; index++; } // 转换数字 int result = 0 ; while (index < s.length()) { char c = s.charAt(index); // 判断是否为数字 if (c < '0' || c > '9' ) { break ; } // 判断是否溢出 if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && c - '0' > Integer.MAX_VALUE % 10 )) { return sign > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE; } // 累加数字 result = result * 10 + (c - '0' ); index++; } // 返回结果 return sign * result; } } |
3. 总结
分类:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-04-28 深入JVM关闭与关闭钩子
2021-04-28 ShutdownHook - Java 优雅停机解决方案
2021-04-28 RocketMQ性能优化
2021-04-28 RocketMQ调优心得总结
2021-04-28 RocketMQ性能优化【实战笔记】
2021-04-28 RocketMQ在面试中那些常见问题及答案+汇总
2019-04-28 24种设计模式的通俗理解