leetcode8.字符串转整数-Java

题目

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格

检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。

读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。

将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。

如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。

返回整数作为最终结果。

注意:

本题中的空白字符只包括空格字符 ' ' 。

除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

代码

java 复制代码
class Solution {
    public int myAtoi(String s) {
        //获取int的边界值
        int INT_MAX=Integer.MAX_VALUE;
        int INT_MIN=Integer.MIN_VALUE;
        int len = s.length();
 
        //如果长度为0,则直接返回
        if(len==0) return 0;
        
        int res=0; //结果
        int i=0;  //下标志
        int flag=1; //正负号
        char[] s1=s.toCharArray(); //转化为char
        
        while(s1[i]==' ' && i<len-1){i++;} //跳过前面的空格
        if(s1[i]=='-'){flag=-1;} 
        if(s1[i]=='-' || s1[i]=='+'){i++;}
 
        //开始读数字
        while(i<len && Character.isDigit(s1[i])){
            int r=s1[i]-'0';
            //判断是否越界
            if(res>INT_MAX/10 || (res==INT_MAX/10 && r>7)){
                return flag>0 ? INT_MAX:INT_MIN;
            }
            res=res*10+r;
            i++;
        }
        return flag>0 ? res:-res;
    }
}
相关推荐
考虑考虑2 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261352 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊3 小时前
Java学习第22天 - 云原生与容器化
java
渣哥5 小时前
原来 Java 里线程安全集合有这么多种
java
间彧5 小时前
Spring Boot集成Spring Security完整指南
java
间彧6 小时前
Spring Secutiy基本原理及工作流程
java
Java水解7 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆9 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学9 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole9 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端