leetcode_8_字符串转化为整数_atoi

Java中判断是否为数字的函数:
筛选条件
  • 排除开头空字符
    • 是否到达末尾
  • 开头字符是否为正负号
    • 后是否紧跟数字
  • 是否非字母

    • 非数字开始无效,返回零
    • 数字开始计数是否溢出不能使用long

      判断溢出会借助INT.MAX_VALUE()这个函数但是不能赋值给一个int 变量;

  • 结果为正还是负
    每一次都需要判断是否超过数组边界

Characater.isDigital(字符);
处理越界
sum = sum*10+digit;

这里*10 和+digit都会造成溢出,解决办法:

1、计算之前先判断此时的结果是否溢出

if(ans>(INT.MAX_VALUE()-digit)/10){
	return 0;
}
else {
	
}
正负号处理

若需要判断正负号之后是否紧跟数字,则会出现如下代码。

if(newstr[index]=='-'){

    if(Characater.isDigit(newchar[index])){
        flag = -1;
        index++;
    }
}else if(newstr[index]=='+'){
   index++;
    if(Characater.isDigit(newchar[index])){
        flag =1;
        index++;
    }
}

改进
其后不是字母,则是下一次循环判断的事,无需落到本次循环情况:

	if(newstr[index]=='-'){

       flag = 0;
       index++;
}else if(newstr[index]=='+'){
      flag =1;
      index++;   
}else if(!Character.isDigit(newstr[index]){
	index++;
}
//符号会被覆盖也就是更新,+jfda-1234结果可以是负数

编译问题

在这里插入图片描述

Integer.MAX_VALUE
Integer.MIN_VALUE

样例

.1

  • 一开始没有仔细看样例输出,这里只需要在遇到一个非数字开始的字符串返回即可,而不是寻找字符串中的数字。

结果溢出

  • 判断出sum有可能溢出时则可以进行返回 Integer.MAX_VALUE或者是Integer.MIN_VALUE
总结
  • 题目需要更仔细的阅读尤其是样例
  • 判断的条件需要更简略有效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值