劍指 Offer 67 把字串轉換成整數

2021-10-23 11:52:01 字數 1954 閱讀 8016

題目及例子如上。

本題核心的問題,就是根據字串str來生成int型數值。比較簡便的是從字串的左邊向右邊生成:

for (int i = 0; i < str.length(); i++)
這個核心問題解決之後,關鍵就是要得到符合我們要求的str,即str全為數字

1.用flag去應對str首字母為+或者-的情況

2.可以用string的trim()函式得到乙個去除首尾空格的字串,不採用這種方式的話可以用迴圈來實現trim函式的功能,以節省空間。

3.還有乙個關鍵的點是,題目中說明了只能儲存32位有符號整數,即儲存範圍為\[}}^}}},} - 1]\],即範圍是integer.min_value和integer.max_value

因此我們根據str生成數值的時候,要提前一步判斷是否溢位。因為每次ans = ans * 10 + str.charat(i) - '0',即至少是前乙個ans * 10,那麼我們就可以根據integer.max_value /10 作為乙個評判標準,然後根據此時需要加上的str.charat(i)來判斷新生成的ans會不會溢位。

**一:時間複雜度:o(n),空間複雜度:o(n),運用了trim()函式生成新的字串

class solution  else if (num[0] != '+') 

int check = integer.max_value / 10;

for (int i = left; i < num.length; i++)

return status * ans;}}

**二:將空間複雜度降到了o(1),用迴圈去實現trim()函式的功能

class solution 

if (str.charat(left) == '-') else if (str.charat(left) == '+')

for (int i = left; i < str.length(); i++)

return flag * ans;}}

**三:沒看題解之前我自己想的,在idea上面能除錯通,leetcode上面提交不過

我的想法是先用兩個指標,篩選出只包含純數字的字串,然後用這個字串去生成數值。前面兩個**是邊檢查字串同時生成數值

class _67  else if (str.charat(0) == '-')  else if (str.charat(0) >= '0' && str.charat(0) <= '9')  else return 0;

return getans(str.substring(left, right), status);

}private int loop(int left, string str)

return i;

}private int getans(string str, int status)

if (status == -1) ans = -ans;

if (ans > math.pow(2, 31) - 1) return new double(math.pow(2, 31) - 1).intvalue();

if (ans < -math.pow(2, 31)) return new double(-math.pow(2, 31)).intvalue();

return new double(ans).intvalue();}}

還有一種思路也是先生成數值之後,再去和區間範圍比較,這種方法理論上來說更實用,因為我很難記住每乙個邊界範圍的數值。有時間嘗試以下:

劍指offer67 把字串轉換成整數

將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入乙個字串,包括數字字母符號,可以為空 如果是合法的數值表達則返回該數字,否則返回0 2147483647 1a332147483647 0 注意邊界條件 coding utf 8 class ...

劍指offer 67 把字串轉換成整數

請你寫乙個函式strtoint,實現把字串轉換成整數這個功能。忽略所有行首空格,找到第乙個非空格字元,可以是 表示是正數或者負數,緊隨其後找到最長的一串連續數字,將其解析成乙個整數 整數後可能有任意非數字字元,請將其忽略 如果整數長度為0,則返回0 如果整數大於int max 2 31 1 請返回i...

劍指 Offer 67 把字串轉換成整數

題目 寫乙個函式 strtoint,實現把字串轉換成整數這個功能。不能使用 atoi 或者其他類似的庫函式。1 首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。2 當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正...