題目描述:
請你來實現(xiàn)一個 myAtoi(string s) 函數(shù),使其能將字符串轉(zhuǎn)換成一個 32 位有符號整數(shù)(類似 C/C++ 中的 atoi 函數(shù))。
函數(shù) myAtoi(string s) 的算法如下:
讀入字符串并丟棄無用的前導(dǎo)空格
檢查下一個字符(假設(shè)還未到字符末尾)為正還是負(fù)號,讀取該字符(如果有)。 確定最終結(jié)果是負(fù)數(shù)還是正數(shù)。 如果兩者都不存在,則假定結(jié)果為正。
讀入下一個字符,直到到達(dá)下一個非數(shù)字字符或到達(dá)輸入的結(jié)尾。字符串的其余部分將被忽略。
將前面步驟讀入的這些數(shù)字轉(zhuǎn)換為整數(shù)(即,“123” -> 123, “0032” -> 32)。如果沒有讀入數(shù)字,則整數(shù)為 0 。必要時更改符號(從步驟 2 開始)。
如果整數(shù)數(shù)超過 32 位有符號整數(shù)范圍 [?231, 231 ? 1] ,需要截斷這個整數(shù),使其保持在這個范圍內(nèi)。具體來說,小于 ?231 的整數(shù)應(yīng)該被固定為 ?231 ,大于 231 ? 1 的整數(shù)應(yīng)該被固定為 231 ? 1 。
返回整數(shù)作為最終結(jié)果。
思路: 首先對字符串刪除首尾的空字符,之后判斷長度是否為0,如果是直接返回長度0;不是則繼續(xù)進(jìn)行操作。然后設(shè)置一個變量,如果第一個字符是正號則設(shè)為1,為負(fù)號則設(shè)為-1。之后就是對字符串進(jìn)行遍歷,如果有數(shù)字就進(jìn)行操作,這一步看代碼即可,但是這里要注意如果超出32位數(shù)字的范圍則直接返回最大值和最小值,這里的處理方式與力扣第七題的處理方式如出一轍就不贅述。最終遍歷完成后得到轉(zhuǎn)換出的整數(shù)值返回乘上一個flg即可。具體看代碼。文章來源:http://www.zghlxwxcb.cn/news/detail-792310.html
代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-792310.html
class Solution {
public int myAtoi(String s) {
s=s.strip();
if(s.length()==0) {
return 0;
}
int flg=1;
int i=0;
if(s.charAt(i)=='-') {
flg=-1;
i++;
} else if(s.charAt(i)=='+') {
i++;
}
int sum=0;
for(;i<s.length();i++) {
if(Character.isDigit(s.charAt(i))) {
int digit=s.charAt(i)-'0';
if((sum>Integer.MAX_VALUE/10 || (sum==Integer.MAX_VALUE/10&&digit>7))&&flg==1) {
return Integer.MAX_VALUE;
} else if((-sum<(Integer.MIN_VALUE/10) || (-sum==(Integer.MIN_VALUE/10)&&digit>8))&&flg==-1) {
return Integer.MIN_VALUE;
} else {
sum=digit+sum*10;
}
} else {
break;
}
}
return flg*sum;
}
}
到了這里,關(guān)于LeetCode-字符串轉(zhuǎn)換整數(shù)atoi(8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!