8. String to Integer (atoi) - Medium

前往題目

之前的文章

想法

  • 有寫出來但是一些test case沒過,找bug找到瘋掉

思路

  1. 忽略空白
  2. 決定正數還是負數
  3. 拼出數字,要防止溢出
  4. 回傳前確認要負數或正數

這題很容易條件沒考慮好…

Code

class Solution {
    public int myAtoi(String s) {
        final int len = s.length();
        int index = 0;

        // No digits
        if (len == 0) return 0;

        // Ignore white spaces
        while (index < len && s.charAt(index) == ' ') {
            ++index;
        }

        // Prevent overflow
        if (index >= len) return 0;

        // Determine sign
        char ch = s.charAt(index);
        boolean isNegative = ch == '-';

        // If sign appears, move index
        if (isNegative || ch == '+') {
            ++index;
        }
        
        // -2147483648 to 2147483647
        final int maxLimit = Integer.MAX_VALUE / 10;
        int result = 0;

        // Iterate until the end or non digit shows
        while (index < len && isDigit(ch = s.charAt(index))) {
            int digit = ch - '0'; // Get current digit
            
            // Out of bound, especially check Integer overflow
            if (result > maxLimit || (result == maxLimit && digit > 7)) {
                return isNegative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }

            // Update the result
            result = (result * 10) + digit;
            ++index;
        }

        return isNegative ? -result : result;
    }

    // Determine if a character is a digit
    private boolean isDigit(char c) {
        return c >= '0' && c <= '9';
    }
}

8. String to Integer (atoi) - Medium
https://f88083.github.io/2024/03/09/8-String-to-Integer-atoi-Medium/
作者
Simon Lai
發布於
2024年3月9日
許可協議