美文网首页
每日两道算法题 - 字符串转整数(高频)

每日两道算法题 - 字符串转整数(高频)

作者: 辉_ace | 来源:发表于2021-12-21 12:48 被阅读0次

    问题

    定义一个函数,将字符串转换为32位有符号整数
    要求:

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

    思路

    1)将字符串中所有的空格去除,并判断去除后的字符串长度
    2)定义变量包括:结果、符号位标记、索引
    3)判断第一个字符为正还是负,如果条件满足则记录标记位否则默认为正
    4)获取每一个字符,判断是否为数字,并做越界处理
    越界处理思路:结果大于MAXVALUE前九位 || (结果等于MAXVALUE前九位&&当前数字大于MAXVALUE最后一位)则中止循环
    5)如果没有越界,结果*10+当前字符

    总结:
    1)去除空格
    2)判断符号位
    3)读取判断拼装数字

    实现

    class Solution {
        public int myAtoi(String s) {
            //去除空格
            s = s.trim();
            if(s.length() == 0){
                return 0;
            }
            //定义结果
            int result = 0;
            //定义符号位
            int sign =1;
            //字符串长度
            int length = s.length();
            //判断符号
            int index=0;
            if(s.charAt(index)=='+' || s.charAt(index)=='-'){
                sign =s.charAt(index++)=='+'?1:-1;
            }
            //判断字符
            for(;index<length;++index){
                // -0是因为当前遍历得到的字符有可能是字母,需要将值转换为ASC码
                int temp = s.charAt(index)-'0';
                //如果是非数组则终止循环
                if(temp<0 || temp>9){
                    break;
                }
                //判断越界
                //判断前九位 和 前九位相等比对最后一位
                if(result > Integer.MAX_VALUE/10 || (result == Integer.MAX_VALUE/10 && temp>Integer.MAX_VALUE%10)){
                    return sign==1?Integer.MAX_VALUE:Integer.MIN_VALUE;
                }else{
                    result = result*10+temp;
                }
    
            }
    
            return sign*result;
        }
    }
    
    image.png

    相关文章

      网友评论

          本文标题:每日两道算法题 - 字符串转整数(高频)

          本文链接:https://www.haomeiwen.com/subject/lhkxqrtx.html