初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
思路一:每次得到数字的个位对应的数字不断*10+个位数再加上符号就可以得到反转的整数
注意问题:整数过大越界问题,符号问题
编辑
class Solution { public int reverse(int x) { //先得到对应是正数还是负数 int note = x>0?1:-1; //将数字转化成正数操作 x = Math.abs(x); //这里的result和lastresule是有区别的对比防止数组越界的 int result=0; int num=0; int lastresult=0; while(x>0) { //得到个位的数字 num=x%10; //一步步得到对应的反转值 result=lastresult*10+num; //这一步是防止数字越界的,只需要与上一次的result比较是否能反推就可以得到结论如果越界返回0 if((result-num)/10!=lastresult) { return 0; } lastresult=result; x=x/10; } //注意符号 return result*note; } }
3u1fbpfcp/9f805311891249e3ad5d0f90b409de2b
翻转每一位数字即可,原理比较简单,
public int reverse(int x) { int res = 0; while (x != 0) { int t = x % 10; int newRes = res * 10 + t; //如果数字溢出,直接返回0 if ((newRes - t) / 10 != res) return 0; res = newRes; x = x / 10; } return res; } public int reverse(int x) { long res = 0; while (x != 0) { res = res * 10 + x % 10; x /= 10; } return (int) res == res ? (int) res : 0; } ![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/db755b8c48a749d5914b984fecc8f116~tplv-k3u1fbpfcp-watermark.image?)