日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

leetcode 8. 字符串转换整数 (atoi)

發布時間:2025/5/22 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 8. 字符串转换整数 (atoi) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

難度:中等
頻次:75

題目:
請你來實現一個 myAtoi(string s) 函數,使其能將字符串轉換成一個 32 位有符號整數(類似 C/C++ 中的 atoi 函數)。

函數 myAtoi(string s) 的算法如下:

讀入字符串并丟棄無用的前導空格
檢查下一個字符(假設還未到字符末尾)為正還是負號,讀取該字符(如果有)。 確定最終結果是負數還是正數。 如果兩者都不存在,則假定結果為正。
讀入下一個字符,直到到達下一個非數字字符或到達輸入的結尾。字符串的其余部分將被忽略。
將前面步驟讀入的這些數字轉換為整數(即,“123” -> 123, “0032” -> 32)。如果沒有讀入數字,則整數為 0 。必要時更改符號(從步驟 2 開始)。
如果整數數超過 32 位有符號整數范圍 [?231, 231 ? 1] ,需要截斷這個整數,使其保持在這個范圍內。具體來說,小于 ?231 的整數應該被固定為 ?231 ,大于 231 ? 1 的整數應該被固定為 231 ? 1 。
返回整數作為最終結果。
注意:

本題中的空白字符只包括空格字符 ’ ’ 。
除前導空格或數字后的其余字符串外,請勿忽略 任何其他字符。


解題思路:按提示遍歷

  • 首先丟棄無用前導空格 [題目的提示]
    • 可能會有string都是空格的情況,需要排除
  • 接著讀取符號位字符 [題目的提示]
    • 有符號位的時候需要進行的處理,標志位+1 -1
    • 沒有±號的時候不用處理,標志位起始值就為1
  • 讀取數字 [題目的提示]
    • 用一個while判斷i和n的大小即可
    • 如果不是數字,直接退出
    • 那么剩下的情況就是數字
      • 預判這輪加上后是是否大于Integer的取值,這一步不能簡單用res>Integer.MAX_VALUE,因為res如果超過最大值,就會變成復數了。這是這道題的精髓,不讓用double,不然就可以直接比較。
        • 預判結果超出界限(拿最大值舉例子2147483647)只有兩種情況
          • 1.當之前的res>214748364,接下來的那一位無論是哪個數字,都會超出界限
          • 2.當之前的res==214748364,接下來的那以為必須要大于7時才會超出界限【這里負數不一樣,-2147483648,最后一位必須大于8】

代碼

class Solution {public int myAtoi(String s) {//當前下標int i=0;int res=0;int n=s.length();char[] charArray=s.toCharArray();//1.丟棄無用的前導空格while(i<n && charArray[i]==' '){i++;}//======需要排除全部都是' '的情況//下標=n說明char數組已經遍歷完了,那就沒有了if(i==n) return 0;//2.檢查該字符是+號還是-號int sign=1;//==有效位數if(charArray[i]=='-'){sign=-1;i++;}else if(charArray[i]=='+'){i++;}//判斷是否跳出循環while(i<n){if(charArray[i]>'9'||charArray[i]<'0') break;int max=Integer.MAX_VALUE;int min=Integer.MIN_VALUE;//3.預判是否在范圍內//因為在int的大小有限,Integer.MAX_VALUE+1就會變成Integer.MIN_VALUE//所以得預判,即超過max=2147483647的有兩種情況//第一種:之前的res比 214748364(max/10)要大,那無論一下位是什么都會超出界限//第二種:之前的res剛好跟214748364(max/10)相等,那下一位只有超過7才會超出界限if (res > max / 10 || (res == max / 10 && (charArray[i]-'0') > max % 10)) {return max;}if (res < min / 10 || (res == min / 10 && (charArray[i]- '0') > -(min % 10))) {return min;}//負號要每一次都×尾數res=10*res+sign*(charArray[i]-'0');i++;}return res;} }

總結

以上是生活随笔為你收集整理的leetcode 8. 字符串转换整数 (atoi)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。