反转数字
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
输入:12
返回值:21
方法一 数学模拟
对数字每次进行%10运算重新翻转,之后再判断界限与符号即可, 翻转后的数可以用long来存储方便后面判断范围
int reverse(int x) {
// write code here
int a = x;
if(a < 0) a *= -1;
long ans = 0;
while(a){ //遍历数字所有位
ans *= 10;
ans += a % 10;
a /= 10;
}
if( ans < -(long)((long)1 << (long)31) || ans >= ((long)((long)1 << (long)31) )) return 0; //判断范围
if(x < 0) ans *= -1; //取负数符号
return (int)ans;
} 时间复杂度: O(n) 遍历一遍数字的长度
空间复杂度: O(1) 若干个变量
方法二 使用java字符串操作
将其转换成string进行翻转操作
public int reverse (int x) {
// write code here
boolean fase = false;
if(x < 0 ) { //判断x是否位负数
fase = true;x *= -1;
}
String a = new StringBuffer(String.valueOf(x)).reverse().toString();//转成字符串并翻转
long s = Long.valueOf(a).longValue();
if( ( -((long)1 << 31) - 1) <= s &&s <= ( ((long)1 << 31) - 1)){ //判断范围
if(fase) return (int)s * -1;
return (int)s;
}
return 0;
}时间复杂度: O(n) 使用reverse进行字符串翻转,reverse复杂度为O(n)
空间复杂度: O(n) 存储数字的字符串,长度为数字的长度

京公网安备 11010502036488号