leetcode 騰訊50題 4 50 整數反轉

2021-09-22 08:07:05 字數 1373 閱讀 5175

給定乙個int型整數,請將各位數字反轉。

如果結果大於int_max或小於int_min,請返回0.

樣例1輸入: 123

輸出: 321

樣例2輸入:-123

輸出:-321

樣例3輸入:120

輸出:21

通過%10每次取出最後一位,然後/10將最後一位刪去,將取出的那位不停加入到翻轉的數字上,當原數字刪除完便可以得到翻轉的數字

因為int型整數逆序後可能會溢位,所以我們要用long long記錄中間結果;

在c++中,負數的取模運算和數學意義上的取模運算不同,結果還是負數,比如 −12%10=−2−12%10=−2,所以我們不需要對負數進行額外處理。

時間複雜度分析:int型整數在十進位制表示下最多有10位,對於每一位的計算量是常數級的,所以總時間複雜度是 o(1)o(1).

class solution 

long

long y=0;

while

(k!=0)

if(y> int_max)

return0;

if(pos)

return y;

else

return

-y;}

};

參考大神的精簡版本

class solution 

if(res>int_max||resreturn0;

else

return res;}}

;

因為res翻轉後可能會溢位,所以先用比int範圍更大的long long 儲存res,當翻轉後再判斷是否溢位,當溢位則輸出0,否則輸出res

int_max

c中常量int_max和int_min分別表示最大、最小整數,定義在標頭檔案limits.h中

int_max,int_min數值大小

因為int佔4位元組32位,根據二進位制編碼的規則,int_max = 2^31-1,int_min= -2^31.c/c++中,所有超過該限值的數,都會出現溢位,出現warning,但是並不會出現error。如果想表示的整數超過了該限值,可以使用長整型long long 佔8位元組64位。

關於int_max int_min的運算

由於二進位制編碼按原碼、補碼和反碼的規則進行運算,所有程式中對int_max和int_min的運算應當格外注意,在出現溢位的時候,不遵循數學規則。

int_max + 1 = int_min

int_min - 1 = int_max

abs(int_min) = int_min

比較有趣的是,int_max + 1 < int_max, int_min - 1 > int_min, abs(int_min) < 0.

leetcode騰訊精選50題(1)

菜鳥第一課 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素...

leetcode 騰訊精選50題 21

given a linked list,rotate the list to the right by k places,where k is non negative.鍊錶的特殊性在於其可以只改變其所指向的位址,而不改變資料存放的真正位址,於是將其收尾閉合後可直接得到乙個閉環的鍊錶,在將其在指定的...

leetcode 騰訊50題 11 50 括號匹配

給定乙個巢狀的括號序列,含有 三種括號,判斷序列是否合法。樣例 和 是合法的 和 不是合法的。棧結構 o n o n 使用棧資料結構 遇到左括號,需要壓棧。遇到右括號,判斷棧頂是否和當前右括號匹配 若不匹配則返回false,否則匹配彈出棧頂。最後判斷棧是否為空 若為空則合法,否則不合法。使用棧的特性...