reverse digits of an integer.(反轉乙個整型數)
example1: x = 123, return 321
example2: x = -123, return -321
1.個人分析
思路一:整型數轉字串->反轉字串->字串轉整型
思路二:數學解法,不斷地進行整除和取餘運算。
2.個人解法
(1)
int
reverse(int x)
//整型轉字串並反轉字串
string str= to_string((long
long)x);
string rstr;
string::reverse_iterator rit=str.rbegin();
for(; rit != str.rend(); ++rit)
rstr.push_back(*rit);
//將字串轉換為整型
long
long res;
istringstream iss(rstr);
iss >>res;
//溢位處理
if(res > int_max || res < int_min)
return
0; return res * sign;
}
(2)
int
reverse(int x)
long
long res = 0;
string str = to_string((long
long)x);
for(string::reverse_iterator rit=str.rbegin(); rit != str.rend(); ++rit)
if(res > int_max || res < int_min)
return
0; return res * sign;
}
3.參考解法
(1)
int
reverse(int x)
return (res > int_max || res < int_min) ? 0 : (int)res;
}
(2)
class
solution
(object):
defreverse
(self, x):
""" :type x: int
:rtype: int
"""
s = cmp(x, 0) #x > 0,s=1; x < 0,s=-1
r = int(`s*x`[::-1]) #先將字串反轉,然後將字串轉換為整型
return s*r * (r < 2**31) #r < 2**31為真時返回1,否則返回0;2**31表示2的31次方
該解法使用python實現,只用了三行**,思路是和思路一類似的。
4.總結
該題比較簡單,但需注意處理溢位的情況。另外前兩種解法是基於字串操作實現的,沒有數學解法簡潔,但提供了乙個比較常用的字串與整型之間相互轉換的方式。
ps:
Reverse Integer演算法題
注意有符號的32bits整數的範圍 return reservation else 之前一直在思考如果給你乙個大整數,如何把這個給定的大整數分解成乙個乙個的數字。後來做了這道題給我很大的啟發。因為我開始的想法是想把這個數轉換成字串的方法來實現這道題的。其實要把乙個大整數拆分成乙個個數隻需要用到取餘 ...
演算法系列 Reverse Integer
reverse digits of an integer.example1 x 123,return 321 example2 x 123,return 321 note the input is assumed to be a 32 bit signed integer.your function...
Reverse Integer 旋轉數字
reverse digits of an integer.example1 x 123,return 321 example2 x 123,return 321 本地注意正負號判斷比較關鍵,實現部分可能不是最優的,按照自己的想法實現 設ret 1 每次對x進行取餘mod,然後ret ret 10 m...