題目描述
將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是乙個合法的數值則返回0
class
solution
else
if(str[0]
=='+'
)for
(; idx)return value;}}
};
class
solution
:def
strtoint
(self,
str:
str)
->
int:
str=
str.strip()if
notstr
:return
0 int_max, int_min, bndry =2**
31-1,
-2**31,2
**31
//10
res, i, sign =0,
1,1if
str[0]
=='-'
: sign =-1
elif
str[0]
!='+'
: i =
0for c in
str[i:]:
ifnot
'0'<= c <=
'9':
break
if res > bndry or res == bndry and c >
'7':
return int_max if sign ==
1else int_min
res *=
10 res +=
ord(c)
-ord
('0'
)return sign * res
思路:
數值越界,即大於 2147483647,或小於 -2147483648,通過觀察程式結構,我們發現,每次迴圈時 value 的值都會擴大10倍(乘以10),那麼,我們是否就可以利用 int_max/10 的值來提前一步判斷是否會越界呢?這裡我們以正數的越界為例進行解釋:
JZ49 把字串轉換成整數
將乙個字串轉換成乙個整數 整數是有範圍的 要求 不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入描述 輸入乙個字串,包括數字字母符號,可以為空 返回值描述 如果是合法的數值表達則返回該數字,否則返回0 示例1輸入 輸出 2147483647 2147483647 示例2...
JZ49 把字串轉換成整數
題目描述 將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 題解 1 判斷是否合法。2 判斷第乙個字元是 或是 3 迴圈乘加。public static intstrtoint string str if str.charat i else if...
49 劍指offer 把字串轉換成整數
題目描述 將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入描述 輸入乙個字串,包括數字字母符號,可以為空 輸出描述 如果是合法的數值表達則返回該數字,否則返回0 輸入例子 2147483647 1a33 輸出例子 2147483647 0 ...