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