【LeetCode算法-08】字符串转成整数 问题

这个问题看起来很简单,但实际上包含了一些复杂的细节。主要需要注意的是处理负号、空格、无效字符等特殊情况。下面是一个可能的解决方案:

首先检查输入字符串是否为空或只有空格,如果是则直接返回0。

然后从第一个非空字符开始查找有效的数字字符。如果找到的有效数字字符前没有加号或减号,说明整个字符串都是正数。如果找到的第一个有效数字字符前有一个减号,说明整个字符串是负数。如果找到的第一个有效数字字符前有一个加号,这个加号会被忽略,因为正数不需要表示。

接着把找到的所有有效的数字字符转换为整数,根据之前是否有负号来决定最终的结果是正数还是负数。

最后还需要处理一些边界情况,比如如果字符串里只有加号或减号,或者是多个加号或减号相连。

以下是具体的Java代码:

class Solution {
    public int myAtoi(String str) {
        if (str.isEmpty() || str.trim().isEmpty()) return 0;

        boolean negative = false;
        long result = 0;
        int start = 0;

        // 去除开头的空白字符
        for (; start < str.length(); ++start) {
            char c = str.charAt(start);
            if (c != ' ') break;
        }

        // 处理正负号
        if (start < str.length()) {
            char sign = str.charAt(start);
            if (sign == '+' || sign == '-') {
                negative = sign == '-';
                ++start;
            }
        }

        // 转换数字部分
        for (; start < str.length(); ++start) {
            char c = str.charAt(start);
            if (c < '0' || c > '9') break;
            long digit = c - '0';
            // 检查是否溢出
            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && digit > 7)) {
                return negative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            } 
            result = result * 10 + digit;
        }

        // 返回结果,注意处理负号
        return (int) (negative ? -result : result);
    }
}

例如,对于输入字符串 " -42",输出应为-42。对于输入字符串 "4193 with words",输出应为4193。对于输入字符串 "words and 987",输出应为0。对于输入字符串 "-91283472332",输出应为-2147483648。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值