1. 程式人生 > >程式設計之法面試和演算法心得-1.4字串轉換成整數

程式設計之法面試和演算法心得-1.4字串轉換成整數

一、題目描述

輸入一個由數字組成的字串,請把它們轉換成整數並輸出。如輸入字串為“123”,輸出整數123。
python化成整數直接可以int(str),現在是自己實現這個函式。

二、解法

這道題看起來比前面的的幾道題都簡單許多,只需要把輸入字串的各個字元的acsii碼減去‘0’的acsii即可。從左向右掃描,依次乘10加當前字元轉義的int。參考程式碼如下:

def StrToInt(s):
    s= list(s)
    n = 0
    for i in range(len(s)):
        c = ord(s[i]) - ord('0')
        n = n*10 + c
    return n

但是這裡有幾點需要注意:

  1. 首先判斷是否為空
  2. 判斷字元第一位是否輸入的為‘-’,如有,則要輸出為負整數
  3. 輸入的字串不能函式非數字的字元,除開‘-’
  4. 輸入的字串不能溢位int的最大表示整數

改進後參考程式碼如下:

def StrToInt(s):
    if (s ==""):
        return 0
    s= list(s)
    n = 0
    if(s[0]=='-'):
        for i in range(1,len(s)):
            if (s[i].isdigit()==True):
                c = ord(s[i]) - ord('0')
                n = n*10 + c
        return n * (-1)
    else:
        for i in range(len(s)):
            if (s[i].isdigit()==True):
                c = ord(s[i]) - ord('0')
                n = n*10 + c
        return n

改進後的程式碼首先判斷輸入不能為空,然後在判斷輸入的首位是否帶有‘-’,以此來判斷是否是負數。通過s[i].isdigit()來判斷當前字元是否為數字,以此過濾非數字字元。python這種高階語言,對int的位數優化的很好,所以不用擔心記憶體溢位。。。。