java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)
題目要求
請(qǐng)你來實(shí)現(xiàn)一個(gè) myAtoi(string s) 函數(shù),使其能將字符串轉(zhuǎn)換成一個(gè) 32 位有符號(hào)整數(shù)(類似 C/C++ 中的 atoi 函數(shù))。
函數(shù) myAtoi(string s) 的算法如下:
- 讀入字符串并丟棄無用的前導(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)。如果沒有讀入數(shù)字,則整數(shù)為 0 。必要時(shí)更改符號(hào)(從步驟 2 開始)。 - 如果整數(shù)數(shù)超過 32 位有符號(hào)整數(shù)范圍 [−2^31, 2^31 − 1] ,需要截?cái)噙@個(gè)整數(shù),使其保持在這個(gè)范圍內(nèi)。具體來說,小于 −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)、' '、'+'、'-' 和 '.' 組成
解題思路
這道題用簡單的模擬法來解。
主要步驟如下:
- 借助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é)
這道題就用模擬法的方式來解,就好了,核心是如何判斷越界。不能在計(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)文章
Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例
下面小編就為大家?guī)硪黄狫ava用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09學(xué)習(xí)Java之IO流中有哪些復(fù)雜的API
這篇文章我們要先對(duì)IO流的API有個(gè)基本的認(rèn)知,因?yàn)镮O流的類和方法太多了,我們不得不專門學(xué)習(xí)一下,所以本文就給大家詳細(xì)的講講Java?IO流中復(fù)雜的API,需要的朋友可以參考下2023-09-09Java Fluent Mybatis實(shí)戰(zhàn)之構(gòu)建項(xiàng)目與代碼生成篇上
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis2021-10-10Spring Boot 接口參數(shù)加密解密的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Boot 接口參數(shù)加密解密的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Maven多個(gè)項(xiàng)目實(shí)現(xiàn)聚合過程解析
這篇文章主要介紹了Maven多個(gè)項(xiàng)目實(shí)現(xiàn)聚合過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08