LC 08 String to Integer (atoi)

字符串轉整數code

  • 字符串開頭可能有不少空格,忽略之,直到找到第一個不是空格的字符。
  • 第一個非空格字符多是加號,減號,表示正數或負數。
  • 繼續向後碰到0-9就解析,碰到其餘字符就終止。
  • 若第一段連續數字爲空,返回0.
  • 若是整數大於Integer.MAX_VALUE,返回MAX_VALUE;若小於Integer.MIN_VALUE,返回MIN_VALUE。
public int myAtoi(String str) {
        if (str == null || str.length() == 0) return 0;
        int len = str.length();
        double res = 0; // 此處用double,防止數字太大溢出
        boolean flag = false; // 標記+/-
        int i = 0; // 索引
        while (i < len && str.charAt(i) == ' ') i++;//直到找到第一個非空格字符
        if (i >= len) return 0;//若是去掉空格後沒字符了,就返回0
        char c = str.charAt(i);
        if (c == '+') {
            flag = true; // 標記爲正數,繼續後移i
            i++;
        } else if (c == '-') { // 標記爲負數,繼續後移i
            flag = false;
            i++;
        } else if (c >= '0' && c <= '9') {
            flag = true; // 若是是數字,則標記爲正數,i不用移動了
        } else {
            return 0; // 非法
        }
        // 從i開始計算
        for (int k = i; k < len; k++) {
            char cur = str.charAt(k);
            if (cur < '0' || cur > '9') break;
            res = res * 10 + (cur - '0');
        }
        // 正數,且res大於MAX_VALUE
        if (flag && res > Integer.MAX_VALUE) return Integer.MAX_VALUE;
        // 負數,且res小於MIN_VALUE
        if (!flag && res < Integer.MIN_VALUE) return Integer.MIN_VALUE;
        return (int) (flag ? res : -res);
    }
相關文章
相關標籤/搜索