这是我参与新手入门的第1篇文章
一、题目描述
给你一个 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 -
提示:
- 思路分析:
-
注意这个提示告诉了我们反转后的值应该在
-2147483648 至 2147483647之间 -
先判断正负数
- 如果数是0 返回0
- 如果是正数,判断是否溢出,溢出返回0,反之进行计算
- 如果是负数,判断是否溢出,溢出返回0,反之进行计算
-
取余之后如果大于7,也属于越界,返回0
-
反之,进行正常的计算返回
-
三、AC 代码
-
根据思路解题
public static int reverse(int x) { //-2147483648 至 2147483647 int res = 0; int digit; while(x != 0){ if(res > 214748364){ return 0; } if(res == 214748364){ res = res * 10; digit = x % 10; if(digit > 7){ return 0; } else{ res = res + digit; return res; } } //负数 if(res < -214748364){ return 0; } if(res == -214748364){ res = res * 10; digit = x % 10; if(digit < -8){ return 0; } else{ res = res + digit; return res; } } res = res * 10; digit = x % 10; res = res + digit; x = x / 10; } return res; }