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

题目

题目

题目地址

咳咳,各位大佬好,小白献丑了。

代码思路是比较简单易懂,因为小白解题是暴力暴力暴力的,按题意一路写。
首先说明一下变量,result是得到的数值结果;flag是用来控制result的正负的;couFuHao是只收取前导空格之后的+/-,而数值中的+/-是数值终止的情况之一;ZF是解决数值中夹有+/-的情况,如"00000-42a1234",如错误案例一,只统计-之前的数;KG是只过滤前导空格,夹在数值中的空格是数值终止的情况之一,是不能过滤的,如错误案例二三。
代码写法有点像switch case结构,思路标明在代码中。

代码实现:

class Solution {
    public int myAtoi(String s) {
        int result = 0,flag = 1;
        boolean couFuHao = false,ZF = false,KG = false;
        for(int i = 0;i < s.length();i++){
            if(s.charAt(i) == ' ' && !KG) continue;//过滤掉前导空格
            if(s.charAt(i) == '+' && !couFuHao && !ZF){//此if和下面的if是获取该数的正负情况
                KG = true;
                couFuHao = true;
                continue;
            }
            if(s.charAt(i) == '-' && !couFuHao && !ZF){
                KG = true;
                flag = -1;
                couFuHao = true;
                continue;
            } 
            
            if(s.charAt(i) <'0' || s.charAt(i) > '9'){//这是获取数值统计终止符,注意前几个if结构中的continue的作用,不会使此处错误的获取终止符
                break;
            }

            if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){
                KG = true;//此两个变量见变量说明
                ZF=true;
                 if (flag == 1 && (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && (s.charAt(i) - '0') >Integer.MAX_VALUE % 10))) {//注意result在每次变化之前,都需要判断result是否超过边界
                    return Integer.MAX_VALUE;
                 }
                if (flag == -1 && (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && (s.charAt(i) - '0') >  -(Integer.MIN_VALUE % 10)))) {
                    return Integer.MIN_VALUE;
                 }
                result = result*10+flag*Integer.parseInt(String.valueOf(s.charAt(i)));//flag在此作用
            }
        }
        return result;
    }
}

错误案例:

一

二

三

结果:

结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值