題目描述:
請你來實作一個 atoi 函數,使其能将字元串轉換成整數。
首先,該函數會根據需要丢棄無用的開頭空格字元,直到尋找到第一個非空格的字元為止。接下來的轉化規則如下:
如果第一個非空字元為正或者負号時,則将該符号與之後面盡可能多的連續數字字元組合起來,形成一個有符号整數。
假如第一個非空字元是數字,則直接将其與之後連續的數字字元組合起來,形成一個整數。
該字元串在有效的整數部分之後也可能會存在多餘的字元,那麼這些字元可以被忽略,它們對函數不應該造成影響。
注意:假如該字元串中的第一個非空格字元不是一個有效整數字元、字元串為空或字元串僅包含空白字元時,則你的函數不需要進行轉換,即無法進行有效轉換。
在任何情況下,若函數不能進行有效的轉換時,請傳回 0 。
提示:
本題中的空白字元隻包括空格字元 ' ' 。
假設我們的環境隻能存儲 32 位大小的有符号整數,那麼其數值範圍為 [−231, 231 − 1]。如果數值超過這個範圍,請傳回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
class Solution {
public int myAtoi(String s) {
String str = s.trim();
if(str.length()==0) return 0;
if(!Character.isDigit(str.charAt(0)) && str.charAt(0) != '+' && str.charAt(0) != '-'){
return 0;
}
//看不懂 這個L????
long ans = 0L;
//若首位為減号,則 neg 為真;反之 neg 為負
boolean neg = str.charAt(0) == '-';
int i = Character.isDigit(str.charAt(0))? 0:1;
while(i < str.length() && Character.isDigit(str.charAt(i))){
ans = ans*10 + (str.charAt(i++)-'0');
if(!neg && ans > Integer.MAX_VALUE){
ans = Integer.MAX_VALUE;
break;
}
if(neg && ans > 1L+Integer.MAX_VALUE){
ans = 1L +Integer.MAX_VALUE;
break;
}
}
return neg? (int)-ans:(int)ans;
}
}