2022/2/27leetCode刷题

2022/2/27leetCode刷题
第八题,字符串转换整数
题目描述:
1、读入字符串并丢弃无用的前导空格
2、检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
3、读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。/
4、将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
5、如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
6、返回整数作为最终结果。

注意:涉及到整数的运算,需要注意溢出,通过昨天的整数反转可以知道:判断某数乘以 10 是否会溢出,那么就把该数和 INT_MAX 除以 10 进行比较。

str = str.trim(); //trim()方法的作用是去掉字符串两端的多余的空格。
Character.isDigit(char a) // 用于判断该字符是否为数字,是则返回true,不是则返回false。
s.charAt(i)-‘0’:两个字符相减实际上是ASCII码对应的数相减;
得到是一个int类型的整数。
此外,常用的ASCII码如下:
空格:32;
0~9: 48-57
a: 65
A:97

class Solution {
    public int myAtoi(String s) {
        boolean flag = true;
        int res = 0;
        String str = s.trim();
        if (str.charAt(0) == '-')
        flag = false;
        for (int i = 0; i < str.length(); i++){
            if (Character.isDigit(str.charAt(i))) {
                int digit = str.charAt(i) - '0';
            if (res >  Integer.MAX_VALUE/10 ||(res ==  Integer.MAX_VALUE / 10 && digit > 7) )
                return flag? Integer.MAX_VALUE :  Integer.MIN_VALUE;
                
                res = res*10 + digit;
            }
        }
        return flag? res:(-res);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值