劍指Offer(4)——字串轉整數
阿新 • • 發佈:2019-02-04
題目描述:
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0
注意:這個題目條件給的比較全面,如果一個題只告訴我們要字串轉整數,我們也要注意問題的全面程度。
class Solution:
def strChageint(s):
if s == '':
print (0) #print 主要是為了看結果,正常做的時候可以去掉
return 0
else:
num = 0
for index, c in enumerate(s):
if c not in ['0','1','2','3','4','5','6','7','8','9'] :
print ('存在非法字元')
return 0
else:
num = num + int(c) * (10**(len(s)-1-index))
print (num)
return num
pro = Solution()
pro.strChageint('097867' )
題目升級:
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0
輸入描述:
輸入一個字串,包括數字字母符號,可以為空
輸出描述:
如果是合法的數值表達則返回該數字,否則返回0
示例1
輸入
+2147483647
1a33
輸出
2147483647
0
思路:
可以使用ord函式,利用ASCII表來幫助我們將字元轉換成數字,我發現‘0’在ASCII表上對應的十進位制數是48,那麼ord(‘0’) -48我們就可以得到對應的數字了。
但是需要注意的是,字串開頭可能會是符號
# -*- coding:utf-8 -*-
class Solution:
def StrToInt(self, s):
if s =='':
return 0
n = 0
for i in range(len(s)):
if i == 0 and (s[i] == '+' or s[i] == '-'):
continue
if s[i] not in ['0','1','2','3','4','5','6','7','8','9']:
return 0
n += (ord(s[i]) - 48) * (10 ** (len(s) - 1 - i))
if s[0] == '-':
return (0-n)
else:
return n