java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)
題目要求
請(qǐng)你來(lái)實(shí)現(xiàn)一個(gè) myAtoi(string s) 函數(shù),使其能將字符串轉(zhuǎn)換成一個(gè) 32 位有符號(hào)整數(shù)(類似 C/C++ 中的 atoi 函數(shù))。
函數(shù) myAtoi(string s) 的算法如下:
- 讀入字符串并丟棄無(wú)用的前導(dǎo)空格
- 檢查下一個(gè)字符(假設(shè)還未到字符末尾)為正還是負(fù)號(hào),讀取該字符(如果有)。 確定最終結(jié)果是負(fù)數(shù)還是正數(shù)。 如果兩者都不存在,則假定結(jié)果為正。
- 讀入下一個(gè)字符,直到到達(dá)下一個(gè)非數(shù)字字符或到達(dá)輸入的結(jié)尾。字符串的其余部分將被忽略。
將前面步驟讀入的這些數(shù)字轉(zhuǎn)換為整數(shù)(即,"123" -> 123, "0032" -> 32)。如果沒(méi)有讀入數(shù)字,則整數(shù)為 0 。必要時(shí)更改符號(hào)(從步驟 2 開始)。 - 如果整數(shù)數(shù)超過(guò) 32 位有符號(hào)整數(shù)范圍 [−2^31, 2^31 − 1] ,需要截?cái)噙@個(gè)整數(shù),使其保持在這個(gè)范圍內(nèi)。具體來(lái)說(shuō),小于 −2^31 的整數(shù)應(yīng)該被固定為 −2^31 ,大于 2^31 − 1 的整數(shù)應(yīng)該被固定為 2^31 − 1 。
- 返回整數(shù)作為最終結(jié)果。
注意:
- 本題中的空白字符只包括空格字符 ' ' 。
- 除前導(dǎo)空格或數(shù)字后的其余字符串外,請(qǐng)勿忽略 任何其他字符。
示例 1:
輸入:s = "42"
輸出:42
示例 2:
輸入:s = " -42"
輸出:-42
示例 3:
輸入:s = "4193 with words"
輸出:4193
提示:
- 0 <= s.length <= 200
- s 由英文字母(大寫和小寫)、數(shù)字(0-9)、' '、'+'、'-' 和 '.' 組成
解題思路
這道題用簡(jiǎn)單的模擬法來(lái)解。
主要步驟如下:
- 借助trim方法,去除s前后的空格
- 判斷s的第一位元素,是否為+和-,從而得到結(jié)果是正數(shù)還是負(fù)數(shù)
- 循環(huán)遍歷s中的所有數(shù)字
- 先判斷加上當(dāng)前數(shù)字是否會(huì)越界,如果會(huì)越界,則直接返回Integer.MAX_VALUE或Integer.MIN_VALUE
- 計(jì)算res值
- index++
- 返回正負(fù)號(hào)標(biāo)記位 * res
Java代碼
class Solution {
public int myAtoi(String s) {
s = s.trim();
int index = 0, flag = 1, res = 0;
if (index < s.length() && (s.charAt(index) == '+' || s.charAt(index) == '-')) {
flag = s.charAt(index++) == '+' ? 1 : -1;
}
while(index < s.length() && Character.isDigit(s.charAt(index))){
int digit = s.charAt(index) - '0';
if(res > (Integer.MAX_VALUE - digit) / 10){
return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
res = res * 10 + digit;
++index;
}
return flag * res;
}
}總結(jié)
這道題就用模擬法的方式來(lái)解,就好了,核心是如何判斷越界。不能在計(jì)算完res值之后再判斷越界,要在計(jì)算res值之前判斷是否越界。
以上就是java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)的詳細(xì)內(nèi)容,更多關(guān)于java題解字符串轉(zhuǎn)換整數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
gitlab-runner結(jié)合docker部署項(xiàng)目全過(guò)程
本文介紹了使用GitLab和GitLab Runner自動(dòng)化構(gòu)建Spring Boot項(xiàng)目的方法,搭建好GitLab和GitLab Runner后,在Spring Boot項(xiàng)目中創(chuàng)建.gitlab-ci.yml文件,配置腳本準(zhǔn)備Maven編譯項(xiàng)目、打包JAR包及運(yùn)行JAR包,并在設(shè)置中配置CI/CD,這樣,點(diǎn)擊項(xiàng)目CI/CD即可自動(dòng)化運(yùn)行2026-05-05
Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn)
這篇文章主要介紹了Java8 用Lambda表達(dá)式給List集合排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Springboot解決no main manifest attribute錯(cuò)誤
在開發(fā)Springboot項(xiàng)目時(shí),使用java -jar命令運(yùn)行jar包可能出現(xiàn)no main manifest attribute錯(cuò)誤,本文就來(lái)介紹一下該錯(cuò)誤的解決方法,感興趣的可以了解一下2024-09-09
由ArrayList來(lái)深入理解Java中的fail-fast機(jī)制
fail-fast俗稱快速失敗,是在多線程進(jìn)行迭代操作時(shí)產(chǎn)生沖突的一種異常拋出機(jī)制,下面我們就由ArrayList來(lái)深入理解Java中的fail-fast機(jī)制.2016-05-05
java數(shù)組及arrays類對(duì)數(shù)組的操作實(shí)例
下面小編就為大家?guī)?lái)一篇java數(shù)組及arrays類對(duì)數(shù)組的操作實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)(賬號(hào)密碼登錄和使用手機(jī)驗(yàn)證碼登錄)
這篇文章給大家介紹springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)方法,包括賬號(hào)密碼登錄和使用手機(jī)驗(yàn)證碼登錄功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-07-07
java獲取IP歸屬地全網(wǎng)顯示開源庫(kù)使用
這篇文章主要為大家介紹了java獲取IP歸屬地全網(wǎng)顯示的開源庫(kù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題
這篇文章主要介紹了Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

