1. 程式人生 > 其它 >【Lintcode】54. String to Integer (atoi)

【Lintcode】54. String to Integer (atoi)

技術標籤:# 棧、佇列、串及其他資料結構leetcodejava字串

題目地址:

https://www.lintcode.com/problem/string-to-integer-atoi/description

給定一個字串 s s s,實現atoi函式。如果得數大於了 2 31 − 1 2^{31}-1 2311則返回 2 31 − 1 2^{31}-1 2311,如果得數小於了 − 2 31 -2^{31} 231則返回 − 2 31 -2^{31} 231

首先對 s s s進行trim,如果 s s s空了則返回 0 0 0,否則看一下符號,記錄一下是正號還是負號。接著遍歷 s s

s,累計得數即可。遇到非數字的字元則退出迴圈。程式碼如下:

public class Solution {
    /**
     * @param s: A string
     * @return: An integer
     */
    public int atoi(String s) {
        // write your code here
        s = s.trim();
        if (s.isEmpty()) {
            return 0;
        }
        
        long res = 0;
        int
sign = 1; if (!Character.isDigit(s.charAt(0))) { sign = s.charAt(0) == '+' ? 1 : -1; s = s.substring(1); } for (int i = 0; i < s.length(); i++) { if (!Character.isDigit(s.charAt(i))) { break; } res =
res * 10 + s.charAt(i) - '0'; // 超出範圍了則返回最大整數或最小整數 if (res > Integer.MAX_VALUE) { return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; } } return (int) (sign * res); } }

時間複雜度 O ( n ) O(n) O(n),空間 O ( 1 ) O(1) O(1)