【牛客 - 剑指offer】JZ67 把字符串转换成整数 Java实现
文章目录
- 剑指offer题解汇总 Java实现
- 本题链接
- 题目
- 题目主要信息
- 方案 遍历法
- 思路
- 具体做法
- 代码
剑指offer题解汇总 Java实现
https://blog.csdn.net/guliguliguliguli/article/details/126089434
本题链接
知识分类篇 - 模拟 - JZ67 把字符串转换成整数
题目
题目主要信息
- 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
- 值为0或者字符串不是一个合法的数值则返回0
- 输入的字符串包括数字、字母、符号,可以为空
- 第一个可能是正负号(可选),若是没有默认正数
- 要去掉前导空格和数字后序无用的字符
- 注意处理整数越界
方案 遍历法
思路
遍历字符串,一个字符一个字符地检查,然后取出掉无用的,取出数字,一个数字一个数字地转换,前面的扩大10倍加上后面一位
具体做法
- 遍历字符串,用index记录全程地下标
- 首先排除空字串,然后越过前导空格,以及前导空格后什么都没有就返回0
- 然后检查符号,没有符号默认为正数
- 在后序遍历的时候,将数字字符转换成字符,遇到非数字则结束转换
- 与Int型最大最小值比较,检查越界情况
代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串
* @return int整型
*/
public int StrToInt(String s) {
//获取字符串的长度
int len = s.length();
//长度为0,则返回0
if (len == 0) {
return 0;
}
//flag用于标记数字的正、负
boolean flag = false;
int i = 0;
//计算结果值
long res = 0;
//忽略前导空格
while (i < len && s.charAt(i) == ' ') {
i++;
}
//在处理完空格以后,如果就已经等于字符串的长度,说明,只有空格,没有数字,返回0
if (i == len) {
return 0;
}
//检查数字的正、负
if (s.charAt(i) == '-') {
flag = true;
i++;
} else if (s.charAt(i) == '+') {
//正号有时候会省略,但还是需要判断一下
i++;
}
//获取数字部分
while (i < len && s.charAt(i) >= '0' && s.charAt(i) <= '9') {
res = res * 10 + (s.charAt(i) - '0');
if (res > Integer.MAX_VALUE) {
if (flag) {
return Integer.MIN_VALUE;
} else {
return Integer.MAX_VALUE;
}
}
i++;
}
//如果有负号,则需要把已有的结果,乘以-1
if (flag) {
return ((int) res) * (-1);
}
return (int) res;
}
}