題目描述:
假設我們的環境只能存儲 32 位大小的有符號整數,那麼其數值範圍爲 [−231, 231 − 1]。如果數值超過這個範圍,qing返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
輸入: "42"
輸出: 42
示例 2:
輸入: " -42"
輸出: -42
解釋: 第一個非空白字符爲 '-', 它是一個負號。
我們儘可能將負號與後面所有連續出現的數字組合起來,最後得到 -42 。
示例 3:
輸入: "4193 with words"
輸出: 4193
解釋: 轉換截止於數字 '3' ,因爲它的下一個字符不爲數字。
示例 4:
輸入: "words and 987"
輸出: 0
解釋: 第一個非空字符是 'w', 但它不是數字或正、負號。
因此無法執行有效的轉換。
示例 5:
輸入: "-91283472332"
輸出: -2147483648
解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍。
因此返回 INT_MIN (−231) 。
解法:
public int myAtoi(String str) {
long res = 0L;
int index = 0;
int sign = 1;
str = str.trim();
if(str == null || str.length() == 0)
return 0;
if(str.charAt(index) == '-' || str.charAt(index) == '+') {
if(str.charAt(index) == '-') {
sign = -1;
}
index++;
}
for(;index < str.length();index++) {
if(str.charAt(index) < '0' || str.charAt(index) > '9')
break;
res = res*10 + (str.charAt(index)-'0');
if(res >= Integer.MAX_VALUE)
break;
}
if(res * sign <= Integer.MIN_VALUE)
return Integer.MIN_VALUE;
if(res * sign >= Integer.MAX_VALUE)
return Integer.MAX_VALUE;
return (int)res*sign;
}