题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目解读及思路
反转题整数,这种题目我记得应该在刚学编程的作业里出现过,但当时没有具体要求,不想这里有具体的要求。
思路
整个思路很简单,从后往前遍历这个整数,用一个变量res记录结果,初始为0每次循环中用res乘以10加上最低位,直到所有位上的数都遍历完。
从后往前遍历可以用两种方法来实现,一是每次循环中,用%10得到最低位,然后将输入整数除以10,适合C/C++,Java;二是将输入整数看作一个整数字符串,从后往前以下标来遍历,适合字符串操作比较方便的语言,如python,Java,C++;
当然,如果使用python实现的话,可以不用在循环内部每次判断是否溢出,在全部计算完再判断也可,(至于越界过后的继续运算开销和每次计算都判断越界的开销谁大,我不清楚,可以弄很多数据来测一测)。而C/C++或Java则需要注意,要在循环内更新res前判断是否溢出。
可能的坑!
这里的坑都是语言方面的问题,对语言不是非常熟悉的话可能会遇到。
若是用第一种方法来实现,且用python来写的话,需要注意一点就是如果输入整数是负数的话,不能对10进行取余,而是需要对-10取余,至于为什么,这就涉及到python底层取余%运算的实现逻辑了,感兴趣的朋友可以自己试试,查阅资料了解了解。还有就是除以10的运算,也不能直接用“/”运算符,这样的计算结果会是小数,应该使用”//“运算符
所以,如果用python的话,就得判断两种情况分别对10和-10取余,当然也可以另辟蹊径,在循环开始前将负数取反,或者其他方法。
C语言代码
int reverse(int x){
int t, res;
res = 0;
int INT_max = INT_MAX / 10;
int INT_min = INT_MIN / 10