zoukankan      html  css  js  c++  java
  • leetcode 8. String to Integer (atoi)

    思路:

    1.首先去掉字符串首尾的空格

    2.判断字符串的长度

    3.将其转换为字符数组

    4.判断首字符是否为“-” “+” 并记录符号

    5.判断是否能转换为数字,不能的话则返回sign * result

    能转换则 result = result * 10 + digit;此时则需要判断result与Integer.MAX_VALUE的大小关系

    需要注意的一点是 因为先进行求和操作,再判断其与Integer.MAX_VALUE的大小关系,如果result为int类型,则会导致溢出,从而产生错误的结果。因此一开始将result定义为double类型,但返回时则需进行强制转换。

    class Solution {
      public int myAtoi(String str) {
        if (str == null) return 0;
    
        str = str.trim();  //去掉字符串首尾的空格 
        if (str.length() == 0) return 0;
    
        char[] chArray = str.toCharArray(); //toCharArray():将字符串对象中的字符转换为一个字符数组
        int sign = 1;
        int i = 0;
        if (chArray[0] == '+') {
          sign = 1;
          i++;
        } else if (chArray[0] == '-') {
          sign = -1;
          i++;
        }
    
        double result = 0;  //使用int会溢出 使用double则不会
        while (i < chArray.length) {
          int digit = chArray[i] - '0';
          if (digit < 0 || digit > 9) {
            return (int)(sign * result);
          }
          
          result = result * 10 + digit;
            if ((result >= Integer.MAX_VALUE && sign == 1) || (result >= Integer.MAX_VALUE + 1  && sign == 0)) {
            return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
          }
          i++;
        }
    
        return (int)(sign * result);
      }
    }
  • 相关阅读:
    PowerShell里的数组
    题解 cf gym 103261 D FFT Algorithm
    欧拉筛求积性函数的一般形式
    题解 LOJ 6053
    题解 SP34112 UDIVSUM
    题解 luogu P5162 WD与积木
    Java 关闭流同步输入输出
    题解 luogu P6620 [省选联考 2020 A 卷] 组合数问题
    hdu 6588 题解
    题解 cf gym 102979 E Expected Distance
  • 原文地址:https://www.cnblogs.com/yanhowever/p/9951226.html
Copyright © 2011-2022 走看看