刷題 力扣解題(2019 19 06)

2021-10-01 07:37:04 字數 2088 閱讀 3408

題目:

請你來實現乙個 atoi 函式,使其能將字串轉換成整數。

首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。

當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號;假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。

該字串除了有效的整數部分之後也可能會存在多餘的字元,這些字元可以被忽略,它們對於函式不應該造成影響。

注意:假如該字串中的第乙個非空格字元不是乙個有效整數字元、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換。

在任何情況下,若函式不能進行有效的轉換時,請返回 0。

說明:假設我們的環境只能儲存 32 位大小的有符號整數,那麼其數值範圍為 [−231, 231 − 1]。如果數值超過這個範圍,請返回 int_max (231 − 1) 或 int_min (−231) 。

用了兩種解法:

解法一:看起來就比較複雜,沒有認真思考仔細審題就是這個結果,費時費力。

intmyatoi

(char

* str)

elseif(

*str ==

'+')

else

}elseif(

*str ==

'-')

else

}elseif(

*str >=

'0'&&

*str <=

'9')

else

if(num > int_max/

10||

(num == int_max/

10&& str_value >=7)

)/*計算值的時候要對正負進行判斷,並且要注意num是否為0值*/

if(plus_minus ==0)

else

str++

; time++;}

else

}return num;

}解法二:模組劃分得比較清楚,易讀性高。

仔細解讀題目就可以知道,在有效字元之前(『0』~『9』)只允許空格和『+』『-』號出現,且正負符號只能出現在有效數字的前面,也就是說只允許出現「空格」+「正負符號」+「有效字元」的組合,其餘不符合條件的情況,返回0.

intmyatoi

(char

* str)if(

*str ==

'-')

elseif(

*str ==

'+')

while

(*str !=

'\0'

)else

}return plus_minus ? num:

-num;

}

值得注意的地方:

0x7fffffff 表示正數:2147483647;

0x80000000 表示負數:-2147483648;

學過計算機基礎的都知道,計算機中:

正數:原碼 = 反碼 = 補碼;

負數:反碼 = 原碼取反;補碼=反碼+1;

按照這樣的規律理解0x80000000對應十進位制的-0,但是列印出來確是-2147483648;

原因是在十六進製制中負數的二進位制原碼的最高位是符號位,後面的31位為序號位,不是值。序號位算出來的值表示負數中從最小值開始到0的位置數。比如:

int型別的取值範圍為[-2 ^31 ~ 2 ^31]

0x800000000

原碼 1000 0000 0000 0000 0000 0000 0000 0000

最高位為1,為負數,序號位的值為0;表示負數範圍內從左到右第一位,即-2 ^31。

再來看看0xffffffff

原碼 1111 1111 1111 1111 1111 1111 1111 1111

最高位為1 ,為負數,序號位為第(2 ^ 31)-1位 (111 1111 1111 1111 1111 1111 1111 1111=(2 ^ 31-1) 所以0xffffffff為負數從小到大 第2^31-1位 ,

即-2 ^ 31+2 ^ 31 - 1= -1

力扣刷題系列

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。從中學知識知道,如果需要求一組數字的中位數,那麼先要從小到大排列這些數字。接著,如果總共有奇數個...

刷題 力扣 119

題目鏈結 題目描述 給定乙個非負索引 k,其中 k 33,返回楊輝三角的第 k 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 3 輸出 1,3,3,1 高階 題目分析 根據題目描述楊輝三角形每一行從左到右依次是 組合 combiner是用來計算組合的結果 依次遍歷每一行從左到右 c...

刷題 力扣 665

題目鏈結 題目描述 給你乙個長度為 n 的整數陣列,請你判斷在 最多 改變 1 個元素的情況下,該陣列能否變成乙個非遞減數列。我們是這樣定義乙個非遞減數列的 對於陣列中所有的 i 0 i n 2 總滿足 nums i nums i 1 示例 1 輸入 nums 4,2,3 輸出 true 解釋 你可...