LeetCode第8题字符串转换整数 (atoi)

继续打卡算法题,今天学习的是第LeetCode8题字符串转换整数 (atoi),这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码能力有一些帮助。

分析一波题目

这道题目里面给了很多详细的信息,首先需要对字符串进行格式解析与校验,包含正负符号,空格需要去除,最终得到都是数字的字符串了。

比如'-123', 得到'123',如果是一个纯数字的字符串,我们可以从高位开始,每次取上一位得到的数字乘10,再加上当前的数字,直到达到最低位。

123为例,比如t代表每次解析到的数字,res代表上一个位置计算的数字。

遍历第一个数字

t = 1

res = 0 * 10 + t = 1

遍历第二个数字

t = 2 res = 1 * 10 + t = 12

遍历第三个数字

t = 3 res = 12 * 10 + t = 123

这样遍历一次之后,字符串就可以解析为一个数字了。

编码解决

c 复制代码
class Solution {
    public int myAtoi(String s) {
        //1、空串判断
        if(s.isEmpty())
            return 0;
        int res = 0;
        int index = 0;
        int n = s.length();
        //2、去掉前导空格(如果有)
        while(index < n){
            if(s.charAt(index) == ' ')
                index++;
            else
                break;
        }
        //3、去掉空格就什么都没有了
        if(index == n)
            return 0;
        int sign = 1;
        //4、处理第一个符号是正负号的情况
        if(s.charAt(index) == '+')
            index++;
        else if(s.charAt(index) == '-'){
            index++;
            sign = -1;
        }
        //5、去掉符号就什么都没有了
        if(index == n)
            return 0;
        while(index < n){
            char c = s.charAt(index);
            //6、后续非法字符,截断
            if(c < '0' || c > '9') 
                break;
            //7、处理越界情况,超过了整型最大值
            if(res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (c - '0') > Integer.MAX_VALUE % 10))
                return Integer.MAX_VALUE;

            //7、处理越界情况,低于整型最小值
            if(res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (c - '0') > -(Integer.MIN_VALUE % 10)))
                return Integer.MIN_VALUE;
            res = res * 10 + sign * (c - '0');
            index++;
        }
        return res;
    }
}

总结

第6/7/8题都没有很多算法,都是需要对一个数字的表示要有理解,不管是从高位到低位,还是从低位到高位,都要知道怎么表达一个数字。

相关推荐
QQ_216962909629 分钟前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
郑州光合科技余经理2 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒2 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
大辉狼_音频架构3 小时前
进阶:从源码编译 SOF 固件与 topology
后端
大辉狼_音频架构3 小时前
上板:让 SOF 在 FRDM-i.MX8MP 上跑起来
后端
大辉狼_音频架构3 小时前
FRDM-IMX8MP UUU 烧录 eMMC 指南
后端
运行时异常4 小时前
【WMS 仓储系统集成 AI Agent 实战】第 3 讲:Spring Security 6 + JWT——addFilterBefore 一词之差,全站 401
java·后端
LinMINGJing0074 小时前
PageHeaderData:Page 的页面头
后端
2601_962069775 小时前
SpringBoot开发——初步了解SpringBoot
java·spring boot·后端
jay神5 小时前
【计算机毕业设计】基于Spring Boot的宠物领养管理系统
java·spring boot·后端·vue·毕业设计·宠物