Leetcode# 7. Reverse Integer(位運算)
阿新 • • 發佈:2018-12-27
宣告:題目解法使用c++和Python兩種,重點側重在於解題思路和如何將c++程式碼轉換為python程式碼。
題意:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
題意
給你一個整數,若這個數在有符號32位範圍內逆序變化輸出,超出輸出0。
思路:C++語言:
獲取有符號int的範圍(這裡用到了位運算的小技巧),判斷逆序後的數是否在int範圍內。
class Solution {
public:
int reverse(int x)
{
int min = (1<<31)*(-1), max = (1<<31)-1;
long long int now = 0;
while(x)
{
now = now * 10 + x % 10 ;
x = x / 10;
}
if(now < min || now > max)
return 0;
return now;
}
};
思路:python語言:
在python中“%”為取餘運算中
-9 % 5 = 5
9 % -5 = -5
沒有c ++中方便,這點比較麻煩,所以我們不如求逆序之前先判斷數的正負號。
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
min = -2147483648
max = 2147483647
now = 0
flag = 0 #代表非負數
if x < 0:
x = -x
flag = 1
while x :
now = now * 10 + x % 10
x = x / 10
if flag == 1:
now = -now
if now < min or now > max:
return 0
return now