LEETCODE 8 String to Integer (atoi) (JAVA題解)
阿新 • • 發佈:2019-01-03
https://leetcode.com/problems/string-to-integer-atoi/
原題如上。
題意解析:
要把一個字串轉換成一個整數。
字串的輸入可能有如下幾種情況:
1.字串的前面可能會有很多空格,這些空格要忽略不計,例如 “ Hello” 要把它當成 “Hello” 來處理
2.如果字串為“+1234abc”,那麼當成“+1234”來處理,如果是“+1234abc1234”,也當成“+1234”來處理,“+1234abc”與“1234abc”同義
3.字串也有可能是“-1234Aabc”,所以要考慮符號
4.如果結果超出一個int的範圍,大於最大值,輸出int最大值2147483647,小於最小值,輸出-2147483648
5.如果字串為空串,或者像“abc12345”,“+abc345d”這樣,即出符號位以外,不是由數字開頭的,那麼就認為無法轉換,對於無法轉換的輸入,輸出0
注意點:
由於計算結果有可能大於int範圍,所以運算過程中結果用long型變數儲存
解題程式碼如下
public int myAtoi(String str) { //結果數字 long result=0; //去掉開頭的空白字元 str=str.trim(); //空字元傳,邊界條件 if(str.equals("")) return 0; //提取符號 int sgn; if(str.charAt(0)=='+' || isDigit(str.charAt(0))){ sgn=1; if(isDigit(str.charAt(0))){ str="+"+str; } } else if(str.charAt(0)=='-') sgn=-1; else return 0; //符號位後一個不是數字,也是邊界條件 if(str.length()<=1 || !(isDigit(str.charAt(1)))) return 0; //轉換邏輯由此開始 for(int i=1;i<str.length() && isDigit(str.charAt(i));i++){ result=result*10+str.charAt(i)-'0'; if(sgn*result>=Integer.MAX_VALUE) return Integer.MAX_VALUE; if(sgn*result<=Integer.MIN_VALUE) return Integer.MIN_VALUE; } return (int)(sgn*result); } private boolean isDigit(char c){ return c>='0' && c<='9'; }