[Leetcode] String to Integer (atoi) 字符串轉整數

String to Integer (atoi)

Implement atoi to convert a string to an integer.java

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.ide

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.ui

通用方法

複雜度

時間 O(n) 空間 O(1)this

思路

字符串題通常考查的都是邊界條件、特殊狀況的處理。因此遇到此題必定要問清楚各類條件下的輸入輸出應該是什麼樣的。這裏已知的特殊狀況有:code

  • 可以排除首部的空格,從第一個非空字符開始計算
  • 容許數字以正負號(+-)開頭
  • 遇到非法字符便中止轉換,返回當前已經轉換的值,若是開頭就是非法字符則返回0
  • 在轉換結果溢出時返回特定值,這裏是最大/最小整數

注意

  • 檢查溢出時最大整數要先減去即將加的最末位再除以10,來處理"2147483648"相似的狀況
  • 能夠參考glibc中stdlib/atoi.c的實現方法

代碼

javapublic class Solution {
    public int myAtoi(String str) {
        str = str.trim();
        int result = 0;
        boolean isPos = true;
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            if(i==0 && (c=='-'||c=='+')){
                isPos = c=='+'?true:false;
            } else if (c>='0' && c<='9'){
                // 檢查溢出狀況
                if(result>(Integer.MAX_VALUE - (c - '0'))/10){
                    return isPos? Integer.MAX_VALUE : Integer.MIN_VALUE;
                }
                result *= 10;
                result += c - '0';
            } else {
                return isPos?result:-result;
            }
        }
        return isPos?result:-result;
    }
}
相關文章
相關標籤/搜索