Leet Code OJ 8. String to Integer (atoi) [Difficulty: Easy]
題目描述:
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式atoi()。
輸入:
輸入可能包含多個測試樣例。
對於每個測試案例,輸入為一個合法或者非法的字串,代表一個整數n(1<= n<=18446744073709551617)。
輸出:
對應每個測試案例,
若輸入為一個格式合法的字串(即恰好表示一個整數),則輸出這個整數;
若輸入為一個合法的字串,但中間出現了數字、+、-以外的特殊字元,則輸出第一個特殊字元之前的整數;
若輸入為一個格式非法的字串,則輸出0;
若輸入的數格式合法,但超出INT_MIN或INT_MAX,如果為正數輸出INT_MAX,如果為負數則輸出INT_MIN .
樣例輸入:
"+8"(省略+號輸出)
"1314"
"-123456"
"1ab3"
" 010";(注意有0的時候,輸出的時候是省略的)
"13 456"
"-66666666666"
"9223372036854775807"
"18446744073709551617"
"- +899999"
" - 321"
" +0 123"
樣例輸出:
8
1314
-123456
1
10
13
-2147483648
2147483647
2147483647
0
0
0
-------------------------------------------------------------------------------------------------------------------------------------------------------------
程式碼:
class Solution { public int myAtoi(String str) { char[] charArr=str.toCharArray(); Long result=0L; int startIndex=0; boolean flag=true;//正數 for(int i=0;i<charArr.length;i++){ if(startIndex==i){ if(charArr[i]==' '){ startIndex++; continue; } if(charArr[i]=='+'||charArr[i]=='0'){ continue; } if(charArr[i]=='-'){ flag=false; continue; } } if(charArr[i]>='0'&&charArr[i]<='9'){ result=result*10+charArr[i]-'0'; if( result > Integer.MAX_VALUE) { if(flag) { result = (long) Integer.MAX_VALUE; } break; } }else{ break; } } if(!flag) { if(result > Integer.MAX_VALUE) { result = (long) Integer.MAX_VALUE + 1; } result = - result; } return result.intValue(); } }
-------------------------------------------------------------------------------------------------------------------------------------------------------------
學習的內容:
1.string轉char【】:char[] charArr=str.toCharArray();
2.如何表示int的最大數和最小數Integer.MAX_VALUE && Integer.MIN_VALUE;
3.判斷是否超過 [−2^31, 2^31 − 1]這個範圍,也是判斷是否超過了int,可以用long最為邊界。
要注意初始化:Long result=0L;
4. 要注意,計算int 的結果時,不能 result=result*10+charArr[i];charArrr【i】是char型別,要想得到‘0’ - ‘9’ 的數值,要使用下面的形式:result=result*10+charArr[i]-'0';
5.提供返回結果的時候:return result.intValue(); 要注意result是個long。
6.不能用 if(length>10){ break; } 判斷是否越界,會出錯,如圖:
主要是因為,if(charArr[i]>='0'&&charArr[i]<='9')中,等於0也會計入長度length中,所以這時的length>10,不準了。
但是如果你去掉if中等於0的這個等號,也會存在問題,因為32023中的0也同樣沒法識別。因此不採用這種判斷越界的辦法,
我想出的一種辦法,在上面。大家可以參考下。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
( 參考了他的主要部分,但是他的程式碼部分有問題)
(參考了 他的題目描述)