int reverse(int x) {
if(x == 0) return 0;
bool belowZero = x < 0 ? true : false;
long long num = x;
string str = to_string(abs(num));
std::reverse(str.begin(), str.end());
str.erase(0,str.find_first_not_of("0"));
stringstream ss(str);
ss >> num;
if(belowZero) num = 0-num;
if(num < INT_MIN || num > INT_MAX) return 0;
return num;
}
使用字符串实现,注意越界的问题,正负数的问题。
int reverse(int x) {
int res = 0;
while(x != 0) {
if(res <= INT_MAX / 10 && res >= INT_MIN / 10)
res = res * 10 + x % 10;
else
return 0;
x /= 10;
}
return res;
}
另一种实现,直接使用int
LeetCode 165. Compare Version Numbers
def compareVersion(self, version1: 'str', version2: 'str') -> 'int':
v1 = [int(x) for x in version1.split('.')]
v2 = [int(x) for x in version2.split('.')]
base = 1
if len(v1) > len(v2):
v1, v2 = v2, v1
base = -1
for i in range(len(v1)):
if v1[i] < v2[i]:
return -1*base
elif v1[i] > v2[i]:
return 1*base
for i in range(len(v1), len(v2)):
if v2[i] != 0:
return -1*base
return 0
思路:利用转换成int 的方法,消除前导0的影响,进行交换使得长度短的版本号在前,之后再检查即可。
def compareVersion(self, version1: 'str', version2: 'str') -> 'int':
v1 = [int(v) for v in version1.split('.')]
v2 = [int(v) for v in version2.split('.')]
for i in range(max(len(v1), len(v2))):
sub_v1 = v1[i] if i < len(v1) else 0
sub_v2 = v2[i] if i < len(v2) else 0
if sub_v1 > sub_v2:
return 1
elif sub_v1 < sub_v2:
return -1
return 0
优化版本:不用交换,直接用 sub_v1 = v[i] if i < len(v1) else 0
vector&