LeetCode(算法)- 8. 字符串转换整数 (atoi)

Posted 程序员牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(算法)- 8. 字符串转换整数 (atoi)相关的知识,希望对你有一定的参考价值。

题目链接:点击打开链接

题目大意:略。

解题思路:略。

相关企业

  • Facebook
  • 微软(Microsoft)
  • 亚马逊(Amazon)
  • 谷歌(Google)
  • 彭博(Bloomberg)
  • 字节跳动
  • 百度

AC 代码

  • Java
// 解决方案(1)
class Solution 
    public int strToInt(String str) 
        str = str.trim();
        boolean fisrtNumFlag = false;
        int sign = 1;
        char[] chars = str.toCharArray();
        char c;
        long res = 0;
        int num = -1;
 
        for (int i = 0; i < chars.length; i++) 
            c = chars[i];
            // 字母
            if (isAlphabet(c)) 
                if (!fisrtNumFlag) 
                    return 0;
                
                break;
            
 
            // 符号
            if (isSign(c)) 
                if (i > 0 && !fisrtNumFlag) 
                    return 0;
                
                if (i == 0) 
                    sign = c == '+' ? 1 : -1;
                    continue;
                
            
 
            // 其他
            if ((num = handleNumber(c)) == -1) 
                break;
            
 
            // 数字
            fisrtNumFlag = true;
            res = res * 10 + num;
            if (sign > 0 && res > Integer.MAX_VALUE) 
                return Integer.MAX_VALUE;
            
            if (sign < 0 && -res < Integer.MIN_VALUE) 
                return Integer.MIN_VALUE;
            
        
 
        return (int)(sign * res);
    
 
    private int handleNumber(char c) 
        if (c >= '0' && c <= '9') 
            return c - '0';
        
        return -1;
    
 
    private boolean isAlphabet(char c) 
        return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
    
 
    private boolean isSign(char c) 
        return c == '+' || c == '-';
    

 
// 解决方案(2)
class Solution 
    public int strToInt(String str) 
        char[] c = str.trim().toCharArray();
        if(c.length == 0) return 0;
        int res = 0, bndry = Integer.MAX_VALUE / 10;
        int i = 1, sign = 1;
        if(c[0] == '-') sign = -1;
        else if(c[0] != '+') i = 0;
        for(int j = i; j < c.length; j++) 
            if(c[j] < '0' || c[j] > '9') break;
            if(res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (c[j] - '0');
        
        return sign * res;
    

 
// 解决方案(3)
class Solution 
    public int strToInt(String str) 
        int res = 0, bndry = Integer.MAX_VALUE / 10;
        int i = 0, sign = 1, length = str.length();
        if(length == 0) return 0;
        while(str.charAt(i) == ' ')
            if(++i == length) return 0;
        if(str.charAt(i) == '-') sign = -1;
        if(str.charAt(i) == '-' || str.charAt(i) == '+') i++;
        for(int j = i; j < length; j++) 
            if(str.charAt(j) < '0' || str.charAt(j) > '9') break;
            if(res > bndry || res == bndry && str.charAt(j) > '7')
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (str.charAt(j) - '0');
        
        return sign * res;
    
  • C++
class Solution 
public:
    int strToInt(string str) 
        int res = 0, bndry = INT_MAX / 10;
        int i = 0, sign = 1, length = str.size();
        if(length == 0) return 0;
        while(str[i] == ' ')
            if(++i == length) return 0;
        if(str[i] == '-') sign = -1;
        if(str[i] == '-' || str[i] == '+') i++;
        for(int j = i; j < length; j++) 
            if(str[j] < '0' || str[j] > '9') break;
            if(res > bndry || res == bndry && str[j] > '7')
                return sign == 1 ? INT_MAX : INT_MIN;
            res = res * 10 + (str[j] - '0');
        
        return sign * res;
    
;

以上是关于LeetCode(算法)- 8. 字符串转换整数 (atoi)的主要内容,如果未能解决你的问题,请参考以下文章

8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)

8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)

LeetCode(算法)- 8. 字符串转换整数 (atoi)

LeetCode(算法)- 8. 字符串转换整数 (atoi)

LeetCode 8.字符串转换整数

LeetCode 8.字符串转换整数