题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
每天一点点进步吧,感觉自己好菜,哈哈!什么都不会!
没看答案的时候,觉得听见的,也容易想,就是得10的余数然后放在乘10,觉得思路也很简单.就简单的写了一下!然后判断一下是否有越界.就ok了.
class Solution {
public int reverse(int x) {
int result = 0;
while (x != 0) {
if ((x > 0 && result > ((Integer.MAX_VALUE - (x % 10)) / 10)) || (x < 0 && result < ((Integer.MIN_VALUE - (x % 10)) / 10))) {
return 0;
}
result = result * 10 + (x % 10);
x = x / 10;
}
return result;
}
}
嗯...对了...
时间复杂度:O(log(x)),x 中大约有 log/10(x) 位数字。
空间复杂度:O(1)。
这个我觉得还可以,比较简单的,然后我去看了别人!
看到别人的思路,真的是对自己有很大的启发,比如这段代码!
敲重点
class Solution {
public int reverse(int x) {
int res = 0 ;
while(x != 0){
int temp = x % 10 + res * 10;
if((temp - x % 10) / 10 != res){ //最关键的一步
return 0 ;
}
res = temp ;
x /= 10 ;
}
return res ;
}
}
解题思路
依次取出当前数字的最后一位数,累加。
关键在于如何判断整数溢出:将每次操作后的数字用临时变量存储,对该变量“反操作”,若与操作前的结果不等,则发生溢出,直接返回0
点击查看原讲解
这个对我的启发很大,这也是另一种思路去验证是否溢出,而且我觉得这种思路更加简单易懂.牛人太多了.也是学习到了! 给这位坐着大大点个赞!
继续坚持! 加油!
网友评论