給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。
題目注意點,不能超出範圍 [−231, 231 − 1]。如果反轉後整數溢位那麼就返回 0。
首先利用字串函式str,將數字轉化為字串x2str,這樣通過len函式統計出數字的長度,如果長度大於32,既可直接返回0。然後建立空的雜湊表haxi,通過字串x2str的首字元判斷整數是正數還是負數,然後通過第乙個迴圈把字元x2str字元賦值到雜湊表中。通過第二個迴圈把雜湊表中倒序的元素取出並賦值給字串a(最後把該字串轉化為整數即可),最後需要對倒序的整數進行檢測,判斷是否出現的倒序後溢位的現象。
class solution:
def reverse(self, x):
""":type x: int
:rtype: int
"""x2str=str(x)
if len(x2str) <= 32:
haxi={}
a=''
if x2str[0] == '-':
haxi[0] = '-'
for i in range(1,len(x2str)):
haxi[i] = x2str[len(x2str) - i]
else:
for i in range(len(x2str)):
haxi[i]=x2str[len(x2str)-1 - i]
for i in haxi.values():
a=a+str(i)
if (int(a) >= -2**31) and (int(a) <= (2**31-1)):
return int(a)
else:
return 0
else:
return 0
python3耗時:76ms
以上演算法解釋:
1.intmax代表正數最大值:231-1,intmin代表負數最小值:-231。
2.x是正數:如果rev迭代使得rev*10 > intmax,即temp=rev 10 +pop不滿足等式,一定會溢位。由於2**31-1==2147483647,即如果rev10 == intmax=214748364時,而且末尾數字pop > 7 時,則一定會溢位。
3.x是負數:如果rev迭代使得rev*10 < intmin,即temp=rev 10 +pop不滿足等式,一定會溢位。由於-2**31==-2147483648,即如果rev10 == intmin=214748364時,而且末尾數字pop < -8 時,則一定會溢位。(**注意:**負數在c++求餘數只有依舊為負數,所以temp和rev都是負數,最後得到的也是負數,所以不用考慮負號)
官網c++實現:
class solution
return rev;}};
c++耗時20ms
python3實現:
通過模仿c++之後,負數檢測出錯,所以在python3中加入判斷是否為負數的判斷,即可轉化為正數,和整數操作一樣,但最後返回值時加負號:
class solution:
def reverse(self,x):
rev=0
intmax=2**31-1
intmin=-2**31
if x>=0:
while(x != 0):
pop = x % 10
x = int(x / 10)
if( rev>int(intmax/10) or ( rev == int(intmax/10) and pop > 7) ):
return 0
if( rev < int(intmin/10) or ( rev == int(intmin/10) and pop < -8) ):
return 0
rev =rev*10 +pop
return rev
else:
x=-x
while (x != 0):
pop = x % 10
x = int(x / 10)
if (rev > int(intmax / 10) or (rev == int(intmax / 10) and pop > 7)):
return 0
if (rev < int(intmin / 10) or (rev == int(intmin / 10) and pop < -8)):
return 0
rev = rev * 10 + pop
return -rev
python3耗時:72ms
注意點:
1.字典運算:
在字典值中迴圈:for i in haxi.values();
在字典鍵中迴圈用:for i in haxi.keys();
獲取字典值:haxi1.get(鍵),或者haxi1[鍵]。
2.注意判斷邏輯:第乙個中的正數和負數判斷以及賦值都不同。
3.注意231,在python中應該是:2**31。
4.python中求餘數和除法:
除法為』 / ',結果是浮點型,所以需要加int轉化。求餘數用 『 % 』。
LeetCode7反轉整數
給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123輸出 321示例 2 輸入 123輸出 321示例 3 輸入 120輸出 21注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返回 0。以字串方式思考...
LeetCode 7 反轉整數
給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123輸出 321示例 2 輸入 123輸出 321示例 3 輸入 120輸出 21注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返回 0。很簡單,就是不...
leetcode 7反轉整數
隨機一題 給定乙個 32 位有符號整數,將整數中的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 231,231 1 根據這個假設,如果反轉後的整數溢位,則返...