iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
自我挑戰組

用java解Leetcode系列 第 8

用java解Leetcode Day8

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250922/20169501OW3uhZYk9E.pnghttps://ithelp.ithome.com.tw/upload/images/20250922/20169501gy7fd2cyj2.png

  1. String to Integer (atoi)

這是一道字串處理的經典問題,這問題要求將一個字串轉換為32位元帶符號整數。解題的關鍵在於按照題目的規則,一步一步地解析輸入字串。

這題的解題步驟是要先處理前導空白字元(Whitespace),具體過程就是先遍歷字串,忽略所有開頭的空白字元(’ ’)。接下來,檢查下一個非空白字元,確定正負號(signedness),如果是’-’,則結果為負;如果是’+’,則結果為正。如果都不是,則預設為正。在確定正負號後,要將讀取位置向後移動一位。再來,就要讀取數字並轉換(Conversion),從正負號之後開始,連續讀取所有的數字字元(’0’到’9’)。如果第一個非空白非符號字元就不是數字,那麼這個字串無法轉換,結果為0。在讀取過程中,將每個數字字元轉換為對應的數值,並逐步建構整數。在轉換的過程中 ,就要處理溢位(Rounding),需要時刻檢查當前建構的整數是否會超出32位元帶符號整數的範圍,即[-2^31, 2^31-1]。最大值是INT_MAX = 2147483647,INT_MIN = -2147483648,在讀取新數字並相加之前,先進行溢位檢查。如果當前值已經大於INT_MAX / 10,或者等於INT_MAX / 10,但新數字大於7(因為INT_MAX的最後一位是7),那麼再讀取一個數字就會溢位。如果結果為正數,當發生溢位時,直接返回INT_MAX;如果結果為負數,當發生溢位時,直接返回INT_MIN。在讀取完所有連續數字字元後,便要返回結果(Return),根據之前確定的正負號,將最終計算出的數值返回。


上一篇
用java解Leetcode Day7
系列文
用java解Leetcode8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言