1. 程式人生 > >python之leetcode—字串轉整數

python之leetcode—字串轉整數

實現 atoi,將字串轉為整數。
該函式首先根據需要丟棄任意多的空格字元,直到找到第一個非空格字元為止。如果第一個非空字元是正號或負號,選取該符號,
並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的
數字字元組合起來,形成整數。
字串可以在形成整數的字元後面包括多餘的字元,這些字元可以被忽略,它們對於函式沒有影響。
當字串中的第一個非空字元序列不是個有效的整數;或字串為空;或字串僅包含空白字元時,則不進行轉換。
若函式不能執行有效的轉換,返回 0。
說明:
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。如果數值超過可表示的範圍,則返回 
INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
輸入: "42"
輸出: 42
示例 2:
輸入: "   -42"
輸出: -42
解釋: 第一個非空白字元為 '-', 它是一個負號。
     我們儘可能將負號與後面所有連續出現的數字組合起來,最後得到 -42 。
示例 3:
輸入: "4193 with words"
輸出: 4193
解釋: 轉換截止於數字 '3' ,因為它的下一個字元不為數字。
示例 4:
輸入: "words and 987"
輸出: 0
解釋: 第一個非空字元是 'w', 但它不是數字或正、負號。
     因此無法執行有效的轉換。
示例 5:
輸入: "-91283472332"
輸出: -2147483648
解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍。 
     因此返回 INT_MIN (−231) 。
# 將輸入的內容進行去空格
num = input().strip()
# 暫時儲存某一段只包含一個正負號或者數字的值
temp = ""
# 記錄正負號的個數
count = 0
# 標記是否已經執行過數字了
flag = False
# 迴圈取出裡面的字元來判斷
for i in range(num.__len__()):
    # 如果當前字元不是正號也不是負號也不是數字時則退出迴圈
    if num[i] != "-" and num[i] != "+" and not num[i].isdigit():
        break
    # 否則繼續判斷
    else:
        # 如果當前字元是正號或者負號時
        if num[i] == "-" or num[i] == "+":
            # 那就記錄好已經有正號或負號了
            count += 1
            # 如果正號或者負號的數目已經超過一個並且還沒記錄過數字則退出迴圈
            if count > 1 or flag:
                break
            # 否則把當前字元疊加到暫存值裡面
            else:
                temp += num[i]
        # 如果當前字元是數字則把當前字元疊加到暫存值裡面
        elif num[i].isdigit():
            temp += num[i]
            # 並且記錄好我暫存值已經有數字了
            flag = True
print(temp)
# 迴圈完之後得到的結果就是,最多包含一個正號或者負號並且他們在最前面,其他字元是數字,或者是空字元,或者全是數字

# 定義一個變數來儲存最後的整數結果
result = 0
# 如果上面迴圈完得到的結果不是空字元時
if temp != "":
    # 再判斷正號或者負號是否在temp裡面
    if "+" in temp or "-" in temp:
        # 如果正號或負號是在最前面再判斷長度是否大於1,保證內容不是一個正號或負號
        if temp.__len__() > 1:
            # 如果條件都是真則證明此值可以轉換成int
            result = int(temp)
    # 剩下的只包含數字可以進行轉換成int
    else:
        result = int(temp)
# 轉換成整數的時候再來判斷是否小於最小值
if result < -2**31:
    result = -2**31
# 判斷是否大於最大值
if result > 2**31-1:
    result = 2**31-1
print(result)

思路:首先要將輸入的內容進行去空格,然後去掉字串中非數字非正負號的字元,在保留正負號的選擇裡,只保留一個並且必須他們是在字串的最開頭。通過count值記錄正號或者負號個數,通過flag來標記上一個字元是否是數字,當第一個字元就是正號或者負號的時候,我就把其字元疊加到temp裡面,這是count就記錄了是一個正號或者負號被記錄下來了,繼續去迴圈下一個字元,如果下一個字元再是正號或者負號則會跳出迴圈並不會再將此字元疊加到temp,如果是數字則進行疊加,並且flag會標記已經記錄過數字了,接下來只能是數字才會再次疊加不然就結束了迴圈。迴圈完整個輸入的字串之後得到的結果可能是空字串(因為可能此字串在去除空格後是非數字非正負號的字元開頭的)、僅有一個正號或者負號(例如:++5、+.5、--55--等等這些前面一個正號或負號接著一個正號或負號或非數字字元最後得到的就只剩正號或者負號)、只有一個正號或者負號其餘字元是數字、全部字元都是數字

迴圈完之後得到的字串,再次進行判斷是否含有正號或者負號,當有正號或者負號的時候再判斷長度是否大於1確保這個字串不是單獨的一個正號或者負號,這時將字串轉換成整數,如果沒有正號或者負號,全部是數字時直接轉換成整數,當然是空字串的話就賦值為0,將字串轉換成整數之後再進行判斷是否小於-2的31次方和是否大於2的31次方減1,之後得到最後結果

此思路僅僅是個人想法,如果有更好的解決方法歡迎交流共同進步~

相關推薦

pythonleetcode字串整數

實現 atoi,將字串轉為整數。 該函式首先根據需要丟棄任意多的空格字元,直到找到第一個非空格字元為止。如果第一個非空字元是正號或負號,選取該符號, 並將其與後面儘可能多的連續的數字組合起來,這部分字元

LeetCode-字串整數(Java)

文章目錄 題目連結 題目描述 示例 解析 題目連結 Problem.8:https://leetcode/problems/string-to-integer-atoi/ 題目描述 實現 ato

Leetcode 字串整數

題目描述: 實現 atoi,將字串轉為整數。 該函式首先根據需要丟棄任意多的空格字元,直到找到第一個非空格字元為止。如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的數字字元

Leetcode——字串整數——python3

# 實現atoi,將字串轉為整數 # 該函式首先根據需要丟棄任意多的空格字元,直到找到第一個非空格字元為止。 # 如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。 # 如果第一個非空字元是數字,則直接將其與之後

leetcode 字串整數 (atoi)

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

LeetCode字串整數(atoi)

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

LeetCode ---- 字串整數(atoi)

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

LeetCode——字串整數 (atoi)(Java)

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

LeetCode-字串整數

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

LeetCode題目--字串整數 (atoi)(python實現)

題目 實現 atoi,將字串轉為整數。 該函式首先根據需要丟棄任意多的空格字元,直到找到第一個非空格字元為止。如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的數字字元組

LeetCode 8. 字串整數 (atoi) Python

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

刷爆LeetCode 字串整數 (atoi)

 字串轉整數 (atoi) 實現 atoi,將字串轉為整數。 該函式首先根據需要丟棄任意多的空格字元,直到找到第一個非空格字元為止。如果第一個非空字元是正號或負號,選取該符號,並將其與後面儘可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直

每日LeetCode 字串整數(atoi)

解決方案: public int myAtoi(String str) { if(str.isEmpty()) return 0; int flag =1,i=0;

基礎演算法字串整數(Leetcode-8)

春招第一步,演算法伴我行 計劃著每天研究幾道演算法題,各個型別儘可能都包含,自己寫出來,好做增強。基本都使用python語言編寫,主要講一下自己的思路,以及AC情況。水平不夠,大家多指正,不吝賜教,十分感謝。 想起之前頭條面試的一道演算法題(另一道下次說),字串轉整數,之前有做過,但是面

LeetcodePython實現字串整數 (atoi)

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

LeetCode第八題字串整數 (atoi)

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

LeetCodePython 8.字串整數 (atoi)

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

[LeetCode]利用Double類完成字串整數 (atoi)

Double.parseDouble(String str) 能把一個String型別的變數轉換為Double型別,而且利用丟擲的異常我們還可以很好的處理無法轉換的字串,故其非常適合做atoi,而之所以不用Integer.parseInteger是因為我們可能

swift 字串整數(atoi)- LeetCode

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

[leetcode]8. String to Integer (atoi)字串整數

Implement atoi which converts a string to an integer. The function first discards as many whitespace characters as necessary until the firs