1. 程式人生 > >字串問題---將整數字符串轉成整數型

字串問題---將整數字符串轉成整數型

【題目】

  給定一個字串str,如果str符合日常書寫的整數形式,並且屬於32位整數的範圍,返回str所代表的整數值,否則返回0。

【舉例】

  str = “123”,返回123。
  str = “023”,因為不符合日常的書寫習慣,返回0。
  str = “A123”,返回0。
  str = “2147483647”,返回2147482647
  str = “2147483648”,溢位,返回0。
  str = “-123”,返回-123。

【基本思路】

  分為兩大步驟。第一步驟,判斷字串的格式是否正確。第二步驟,如果符合書寫規範,將字串轉換成整數型。

一.判斷字串是否符合書寫規範。

  1. 如果str不以‘-’開頭,也不以數字字元開頭,返回False。
  2. 如果str以‘-’開頭,但是字串的長度為1,或者字串的第二個字元是0,返回False。
  3. 如果字串以‘0’開頭,但是字串的長度大於1,返回False。
  4. 如果步驟1~3都不返回False,遍歷str[1…N-1],如果有一個不是數字字元,返回False。如果都是數字字元,返回True。

二.將字串轉換為整數型。

  32位整數的範圍是-2^31 ~ 2^31-1,最小整數的絕對值大,所以在轉換的過程中的絕對值一律以負數形式出現。具體過程如下:

  1. 使用布林型變數posi來表示轉換的數字是正還是負,正為True,負為False,由字串的第一個字元來確定posi的值。使用res變數來表示轉換的結果。

  2. 如果第一個字元是‘-’,從str[1]開始向右遍歷,否則從str[0]開始向右遍歷。假設遍歷到當前的字元的負數形式是cur,res = res × 10 + cur。遍歷的過程中統一使用負數形式,最後在根據posi的值確定最終的結果。

  3. 遍歷過程中如何判斷數字是否溢位?使用兩個變數,minq代表32位整數最小值除以10的商,minr表示32位整數最小值除以10的餘數。在遍歷累加的過程中,如果發現res的值已經小於minq,那麼再加上cur,則最終的結果一定溢位。如果res的值等於minq,又發現cur小於minr,則最終的結果也一定溢位。出現任意一種溢位的情況,直接返回0。

  4. 最後根據posi的值來確定數字的正負。注意如果res = -2^31,但是posi = True,此時正溢位,返回0。

  5. 為什麼需要使用minq,minr的方式來判斷溢位而不直接和-2^31 ~,2^31-1比較?因為對於32位系統如果所累積的和超過這個範圍,計算機就已經無法表示,程式會直接報錯。

下面是使用python3.5實現的程式碼

#將整數字符串轉成整數型
def convert(str1):
    def isValid(str1):
        if str1[0] != "-" and (ord(str1[0]) < ord('0') or ord(str1[0]) > ord('9')):
            return False
        if str1[0] == '-' and (len(str1) == 1 or str1[1] == '0'):
            return False
        if str[0] == '0' and len(str) > 1:
            return False
        for i in range(1, len(str1)):
            if ord(str1[i]) < ord('0') or ord(str1[i]) > ord('9'):
                return False
        return True

    if str1 == None or str1 == "":
        return 0
    if not isValid(str1):
        return 0
    posi = False if str1[0] == '-' else True
    minq = (-1 << 31) / 10
    minr = (-1 << 31) % 10
    res = 0
    cur = 0
    for i in range(0 if posi else 1, len(str1)):
        cur = ord('0') - ord(str1[i])
        if res < minq or (res == minq and cur < minr):
            return 0
        res = res * 10 + cur
    if posi and res == (-1 << 31):
        return 0
    return -res if posi else res

相關推薦

字串問題---整數整數型

【題目】   給定一個字串str,如果str符合日常書寫的整數形式,並且屬於32位整數的範圍,返回str所代表的整數值,否則返回0。 【舉例】   str = “123”,返回123。   str = “023”,因為不符合日常的書寫習慣,返回0。  

5.5 整數整數值

【題目】:   給定一個字串str,如果str符合日常書寫的整數形式,並且屬於32位整數的範圍,返回str所代表的整數值,否則返回0   舉例:     str="123",返回123     str="023",因為"023"不符合日常的書寫習慣,所以返回0     str="A13",返回0

問題----整數轉換整數值

最大 範圍 轉換成 ret 表示 形式 com 解題思路 integer 將整數字符串轉換成整數值      給定一個字符串str,如果str符合日常書寫的規範,並屬於32位整數的範圍,返回str所代表的整數值,否則返回0。如 023, A13, 2147483648,均返

js-整數解析對應的數字

不要過分依賴API,如果可以的話,多想想如何手動解決問題。 在面試時遇到這麼個問題,大致描述如下:現有如下需求,需要將字串型別的數字轉換為數字型別,不適用parseInt函式實現? 例如: 輸入:"12345", 輸出:12345 /** * @

整數的函數給我看一下嗎,簡單看一下代碼基本功。要求:不要調用parseInt等轉換函數

main 一段 ack substr date tin || parse pre 為了提高面試流程效率,方便用java寫一段將字符串轉成整數的函數給我看一下嗎,簡單看一下代碼基本功。 要求:不要調用parseInt等轉換函數。按位讀取字符串裏的字符進行處理將字符串轉化為整數

Java二進制碼

pub har toc clas += 轉換成 ava temp color Java將字符串轉成二進制碼 public void toBinary(){ String str = "王雪"; char[] strChar=str.toCharArray(

【LeetCode-面試算法經典-Java實現】【008-String to Integer (atoi) (整數)】

pre except tco ecif hid pan format 說明 elf 【008-String to Integer (atoi) (字符串轉成整數)】 【LeetCode-面試算法經典-Java實現】【全部題目文件夾索引】 原題

數字

分享圖片 nbsp int bubuko img com image .com 類型 將字符串轉成數字 input :無論輸入的是數字還是字符串,都會把輸入當做字符串,當不想把數字轉成字符串時,可用int將字符串轉成數字 這時我們輸入的字符類型為:字符串 這時我們輸入的

[PHP] 算法-一個轉換一個整數的PHP實現

empty 當前位置 value 實現 包含 symbol 不能 res 整型 題目描述 將一個字符串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字符串轉換整數的庫函數。 數值為0或者字符

C#中將 Base64 編碼 (加密--解密)

odin .html ctype cte bytes webp ase nba bsp 1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Base64.aspx.cs" Inherits="Base

一個lambda化為lambda表達式的公共類

變量 修改 ring span 類型參數 dexp tro clas log 一個將lambda字符串轉化為lambda表達式的公共類。StringToLambda 使用方式如下: var module = new Module(); url = url.ToLower(

Jacksonjson轉換泛型List

str json數組 std cer time stl cond exc obj 情景: 需求,需要做一個接口,請求體中的參數是string類型。 參數是一個批量的數據,json數組格式,所以需要把string的參數轉換成list類型。 參數如下: [ {

[轉載]json轉換json對象

新版 函數 就是 ron ast 接下來 對象 obj 壓縮 例如: JSON字符串: var str1 = ‘{ "name": "cxh", "sex": "man" }‘; JSON對象: var str2 = { "name": "cxh", "sex": "ma

json轉換json對象,json對象轉換,值轉換

兩個 負數 相關 5.6 對象 style pre www. 進行 主要內容: 一、json相關概念 二、json字符串轉換成json對象 (字符串-->JSON對象) 三、json對象轉換成字符串(json對象-->字符串) 四、將值轉換成字符串(值-

Jacksonjson轉換List<JavaBean>

ray 註意 編譯 new pub gpo body get ont public final ObjectMapper mapper = new ObjectMapper(); public static void main(String[] args)

jsonjson對象的方法

json字符串和對象在數據交互的過程中,json是以文本的形式進行傳輸的,而js操作的是json對象,所以我們就需要將符合json格式的字符串轉換成json對象進行操作。一:將json字符串轉換成json對象有兩種方法 註意事項: 如果此時 str寫成這個樣子,如圖所示報錯信息,如圖:所以,總結

帶=號的字典

http inf bubuko com nbsp png 技術 info src s = ‘a=1,b=2,c = 3‘ dic = dict((l.split(‘=‘) for l in s.split(‘,‘)))帶=號的字符串轉成字典

perl6 中將 十六進制

size output lan org nbsp 十六進制 docs href pack say Blob.new(‘abcde‘.encode(‘utf8‘)).unpack("H*"); say ‘0x‘~‘abcde‘.encode(‘utf8‘).unpack("

面試題1:把ASCII碼整數轉換對應的整數

題目:        輸入一個表示整數的字串,把該字串轉換成整數並輸出。        例如輸入字串"345",則輸出整數345。 分析: 首先我們分析如何完成基本功能,即如何把表示整數的字串正確地轉換成整數。還是以"345"作為例子。當我們掃描到字串的第一個字元'3'時,

C語言轉換對應的數字(十進制、十六進制)【

字符串表 .com 表示 == 還需要 ref lower href tar 轉自:http://wawlian.iteye.com/blog/1315133 問題1:講一個十進制數字的字符串表示轉換成對應的整數。舉例:將“1234”轉換成整