[Leetcode] #7 整数反转
作者:互联网
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1]
,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
输入:x = 123
输出:321
我能想到的有两种思路。一是通过数学方式反转,二是通过字符串反转。
解法一:
先以123为例,思考其变化过程(其实就是加减乘除拼出答案,找规律再整理出来)
class Solution { public int reverse(int x) { int res = 0;//x = 123 res*10//0 x%10//3 res = res*10 + x%10;//0 + 3 x = x/10;//12 res*10//30 x%10//2 res = res*10 + x%10 //30 + 2 x = x/10;//1 res*10//320 x%10//1 res = res*10 + x%10 //320 + 1 return res; } }
提取公共部分转化为循环
class Solution { public int reverse(int x) { int res = 0; while(x != 0) { res = (res * 10) + (x % 10); x /= 10; } return res; } }
提交后提示解答错误,看评论才知道还需要考虑反转后是否溢出(-231 <= x <= 231 - 1
)
优化(参考评论)
class Solution { public int reverse(int x) { int res = 0; while(x != 0) { int tmp = res; // 保存计算之前的结果 res = (res * 10) + (x % 10); x /= 10; // 将计算之后的结果 / 10,判断是否与计算之前相同,如果不同,证明发生溢出,返回0 if (res / 10 != tmp) return 0; } return res; } }
解法二:
未完待续...
标签:10,return,int,反转,整数,x%,res,Leetcode 来源: https://www.cnblogs.com/jpppp/p/15016573.html