字串轉整數(atoi),方法總結和思考

2021-10-04 18:44:21 字數 1779 閱讀 3620

leetcode:字串轉換整數 (atoi)

這個題目主要考察邊界處理、溢位、容錯處理相關的能力。

a. 在轉化的過程中防止溢位

解決思路:res * 10 + curval <= int_max,轉化一下 res <= (int_max - curval)/10

以下為解決**:

class

solution

else

if(str[i]

=='+'

)else

if(str[i]

==' '

)continue

;else

break;}

int res =0;

for(

; i < str.

length()

&&isdigit

(str[i]);

++i)

res = res *

10+ cur_val;

}return minus_flag * res;}}

;

基於c++的特點,可以採用以下簡單的取巧方法:

class

solution

};

python簡單解決方法,可以採用正規表示式

class

solution

:def

myatoi

(self, s:

str)

->

int:

return

max(

min(

int(

*re.findall(

'^[\+\-]?\d+'

, s.lstrip())

),2**

31-1)

,-2**

31)

^:匹配字串開頭

[+-]:代表乙個+字元或-字元

?:前面乙個字元可有可無

\d:乙個數字

+:前面乙個字元的乙個或多個

\d:乙個非數字字元

*:前面乙個字元的0個或多個

max(min(數字, 2^31 - 1), -2^31) 用來防止結果越界

在我們考察候選者的時候,會重點關注這類問題,可以間接的反映邏輯思維能力。

在日常工作開發中,邊界條件處理需要認真的進行思考,否則**容易出錯。

以下是常見的邊界條件錯誤:

輸入資料不合法

陣列越界

呼叫的方法丟擲異常

呼叫其他系統介面時資料未能按要求返回

打不開資料庫連線

資料庫表在初始情況下沒有值

執行時間過長導致超時

邊界條件說起來容易,寫的時侯會發現很容易落掉的。

如輸入引數是指標型別:null的檢查

如陣列和容器類:是否為空,或長度是否為1…//巢狀容易的元素長度是否為0

以及string 型別:長度是否為0,1

判斷條件<=,>=的時侯》和=的判斷是否應該一樣

最後這個在二分查詢、快速排序的時候比較重要,也是大家經常出錯的地方。

待補充

字串轉整數 atoi

實現 atoi,將字串轉為整數。在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形成整數的字元後面...

字串轉整數(atoi)

實現atoi,將字串轉為整數。在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形成整數的字元後面包...

LeetCode 字串轉整數 atoi

實現atoi,將字串轉為整數。在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形成整數的字元後面包...