lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

 

 https://leetcode.cn/problems/string-to-integer-atoi/submissions/428764685/

 

LeetCode 8 是一道字符串转换整数的题目,

考查的是如何处理各种边界情况和异常输入,比如空格、正负号、非数字字符、溢出等

2. 解法

 

 

 

解法思路:

  • 首先,使用trim()方法去除字符串s的开头和结尾的空格。
  • 然后,判断字符串是否为空,如果为空,就返回0。
  • 接着,判断字符串的第一个字符是否是正负号,如果是,就记录下符号,并将索引index加一,跳过这个字符。如果不是,就默认为正号。
  • 然后,使用一个循环遍历字符串的剩余字符,每次取出一个字符c,并进行以下操作:
    • 判断c是否是数字,如果不是,就跳出循环,结束转换。
    • 判断当前的结果result是否会溢出整数范围,如果是,就根据符号返回最大值或最小值。
    • 将c转换为数字,并将result乘以10再加上c,得到新的结果。
    • 将索引index加一,继续下一个字符。
  • 最后,将结果result乘以符号sign,并返回。

 

具体实现

class Solution {
    public int myAtoi(String s) {
        // 去除空格
        s = s.trim();
        // 判断是否为空
        if (s.length() == 0) {
            return 0;
        }
        // 判断正负号
        int sign = 1;
        int index = 0;
        if (s.charAt(0) == '+') {
            index++;
        } else if (s.charAt(0) == '-') {
            sign = -1;
            index++;
        }
        // 转换数字
        int result = 0;
        while (index < s.length()) {
            char c = s.charAt(index);
            // 判断是否为数字
            if (c < '0' || c > '9') {
                break;
            }
            // 判断是否溢出
            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && c - '0' > Integer.MAX_VALUE % 10)) {
                return sign > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            // 累加数字
            result = result * 10 + (c - '0');
            index++;
        }
        // 返回结果
        return sign * result;
    }
}

  

3. 总结

 

posted on 2023-04-28 20:51  白露~  阅读(4)  评论(0编辑  收藏  举报