Leet Code 8.字符串转换整数
2024-09-07 01:41:11
实现一个atoi函数,使其能将字符串转成整数,根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或负号时,则将该符号与后面尽可能多的连续数字组合起来,作为该整数的正负号。之后可能有多余字符,可以被忽略。不能有效转换,返回0.
题解
没有什么优解,只能根据示例和题意不断做判断。先清除空格,后判断数字,最后小心数字溢出。
我的解法代码
public class Solution {
public int myAtoi(String str) {
int len = str.length();
// 去除前导空格
int index = 0;
while (index < len) {
if (str.charAt(index) != ' ') {
break;
}
index++;
}
if (index == len) {
return 0;
}
// 第 1 个字符如果是符号,判断合法性,并记录正负
int sign = 1;
char firstChar = str.charAt(index);
if (firstChar == '+') {
index++;
sign = 1;
} else if (firstChar == '-') {
index++;
sign = -1;
}
// 不能使用 long 类型,这是题目说的
int res = 0;
while (index < len) {
char currChar = str.charAt(index);
// 判断合法性
if (currChar > '9' || currChar < '0') {
break;
}
// 题目中说:环境只能存储 32 位大小的有符号整数,因此,需要提前判断乘以 10 以后是否越界
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10)) {
return Integer.MAX_VALUE;
}
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10))) {
return Integer.MIN_VALUE;
}
// 每一步都把符号位乘进去
res = res * 10 + sign * (currChar - '0');
index++;
}
return res;
}
}
最新文章
- CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.
- IOS导航栏颜色渐变与常用属性
- C/C++读入一行不定个数的整数
- JS滚轮事件封装
- Render OpenCascade Geometry Curves in OpenSceneGraph
- C#MongoDB使用实践
- SQL存储过程概念剖析
- c++中的 extern ";C";(转载)
- Android监听事件
- Acdream a + b
- [ios2]ios系统中各种设置项的url链接
- Struts2-3.struts.xml的action可以简写
- 五、 创建连接串连接本地数据库(ASP.NET MVC5 系列)
- css3转盘抽奖
- angular或者js如何确定选中ul中的哪几个li
- SSM登陆拦截器实现
- mongodb集群故障转移实践
- bootstrap-datepicker 开始时间-结束时间 thinkphp
- 【three.js练习程序】旋转物体自身
- .NetCore使用FluentValidation实现友好验证提示