【Lintcode】54. String to Integer (atoi)
阿新 • • 發佈:2020-12-27
技術標籤:# 棧、佇列、串及其他資料結構leetcodejava字串
題目地址:
https://www.lintcode.com/problem/string-to-integer-atoi/description
給定一個字串 s s s,實現atoi函式。如果得數大於了 2 31 − 1 2^{31}-1 231−1則返回 2 31 − 1 2^{31}-1 231−1,如果得數小於了 − 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)。