題目描述:
實作 atoi,将字元串轉為整數。
該函數首先根據需要丢棄任意多的空格字元,直到找到第一個非空格字元為止。如果第一個非空字元是正号或負号,選取該符号,并将其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接将其與之後連續的數字字元組合起來,形成整數。
字元串可以在形成整數的字元後面包括多餘的字元,這些字元可以被忽略,它們對于函數沒有影響。
當字元串中的第一個非空字元序列不是個有效的整數;或字元串為空;或字元串僅包含空白字元時,則不進行轉換。
若函數不能執行有效的轉換,傳回 0。
說明:
假設我們的環境隻能存儲 32 位有符号整數,其數值範圍是
。如果數值超過可表示的範圍,則傳回![]()
LeetCode 第8題:實作 atoi,将字元串轉為整數 。![]()
LeetCode 第8題:實作 atoi,将字元串轉為整數
解決思路:
- 如果按照規則來做,一定要簡潔,不然非常麻煩。
public int myAtoi(String str){
if(str == null || "".equals(str))
return 0;
int sign = 1, base = 0, i = 0, n = str.length();
while(i < n && str.charAt(i) == ' ')
i++;
if(str.charAt(i) == '+' || str.charAt(i) == '-'){
sign = (str.charAt(i++) == '+') ? 1 : -1;
}
while(i < n && str.charAt(i) >= '0' && str.charAt(i) <= '9'){
//&& str.charAt(i) - '0' > 7表示最後一位産生了溢出
if(base > Integer.MAX_VALUE / 10 || (base == Integer.MAX_VALUE / 10 && str.charAt(i) - '0' > 7)){
return (sign == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
base = 10 * base + (str.charAt(i++) - '0');
}
return base * sign;
}