Fork me on GitHub

leetcode之7.整数反转

题目描述:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

1
2
3
> 输入: 123
> 输出: 321
>

示例 2:

1
2
3
> 输入: -123
> 输出: -321
>

示例 3:

1
2
3
> 输入: 120
> 输出: 21
>

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解题思路:

思路一:

​ 直接对整数进行反转,时间复杂度为:$O(n)$,空间复杂度: $O(1)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#define INT_MAX 0x7FFFFFFF
#define INT_MIN -INT_MAX-1
class Solution {
public:
int reverse(int x) {
long long m, y = 0;

while(x)
{
m = x % 10;
y = y * 10 + m;

x = x / 10;

}


if( y > INT_MAX || y < INT_MIN)

return 0;

return y;


}
};

思路二:

​ 运用字符串进行反转,时间复杂度:$O(n)$,空间复杂度:$O(n)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
int reverse(int x) {
int flag = 0;
if(x < 0 ) {
flag = 1;
x = -x;
}
string y = to_string(x);

int n = y.size();
for(int i = 0; i < n / 2;i++)
{
swap(y[i],y[n - 1 - i]);
}

long res = stol(y); //string转long类型,用stol,自动把前面的0去掉,string转int,用stoi
if(res > INT_MAX) return 0;
if(flag) res = -res;
return (int)res;

}
};