天天看點

初級算法-11-字元串轉換整數 (atoi)

  • 描述:

    請你來實作一個 myAtoi(string s) 函數,使其能将字元串轉換成一個 32 位有符号整數(類似 C/C++ 中的 atoi 函數)。

    函數 myAtoi(string s) 的算法如下:

    讀入字元串并丢棄無用的前導空格

    檢查下一個字元(假設還未到字元末尾)為正還是負号,讀取該字元(如果有)。 确定最終結果是負數還是正數。 如果兩者都不存在,則假定結果為正。

    讀入下一個字元,直到到達下一個非數字字元或到達輸入的結尾。字元串的其餘部分将被忽略。

    将前面步驟讀入的這些數字轉換為整數(即,“123” -> 123, “0032” -> 32)。如果沒有讀入數字,則整數為 0 。必要時更改符号(從步驟 2 開始)。

    如果整數數超過 32 位有符号整數範圍 [−231, 231 − 1] ,需要截斷這個整數,使其保持在這個範圍内。具體來說,小于 −231 的整數應該被固定為 −231 ,大于 231 − 1 的整數應該被固定為 231 − 1 。

    傳回整數作為最終結果。

    注意:

     本題中的空白字元隻包括空格字元 ’ ’ 。

     除前導空格或數字後的其餘字元串外,請勿忽略 任何其他字元

  • 執行個體:

輸入:s = “42”

輸出:42

解釋:加粗的字元串為已經讀入的字元,插入符号是目前讀取的字元。

第 1 步:“42”(目前沒有讀入字元,因為沒有前導空格)

^

第 2 步:“42”(目前沒有讀入字元,因為這裡不存在 ‘-’ 或者 ‘+’)

^

第 3 步:“42”(讀入 “42”)

^

解析得到整數 42 。

由于 “42” 在範圍 [-231, 231 - 1] 内,最終結果為 42 。

  • 小結:
  1. 整體思路:去空格(記得排除,全部是空格的極端情況)->判斷正負号->開始正式把字元串轉換為整數(記得排除溢出的情況和非數字的情形)
  2. 實用tips:第一:字元串轉數字的算法:

    int temp = 0, temp = temp * 10 + num

    , 數字,左移的方法:

    x /= 10

    , 數字彈出末位:

    x %= 10

  • 代碼:
class Solution {
    public int myAtoi(String s) {
        if (s == null || s.length() == 0) return 0;
        char[] arr = s.toCharArray();
        int index = 0;
        while (index < arr.length && arr[index] == ' ') {
            index++;
        }
        if (index >= arr.length) {
            return 0;
        }
        int sign = 1;
        if (arr[index] == '-' || arr[index] == '+') {
            if (arr[index] == '-') {
                sign = -1;
            }
            index++;
        }
        int res = 0;
        int temp = 0;
        while (index < arr.length) {
            int num = arr[index] - '0';
            if (num > 9 || num < 0) break;
            temp = 10 * temp + num;
            if (temp/10 != res) {
                if (sign == 1) {
                    return Integer.MAX_VALUE;
                } else {
                    return Integer.MIN_VALUE;
                }
            }
            res = temp;
            index++;
        }
        return res*sign;
    }
}
           

繼續閱讀