题目:整数反转
代码
(C语言)
int reverse(int x){
int rev = 0;
while (x != 0) {
int pop = x % 10; //pop一开始指的是个位数
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
rev = rev * 10 + pop; //先只把个位数翻转过来,判断有没有溢出。下一轮再把十位数也翻过来,判断溢出没......
}
return rev;
}
参考链接:https://leetcode-cn.com/problems/reverse-integer/solution/hua-jie-suan-fa-7-zheng-shu-fan-zhuan-by-guanpengc/
例子1:
假设范围是:-200~199 , X = 123.
则 INT_MAX/10 = 199/10 = 19
INT_MIN/10 = -200 = -20
if语句中的条件 pop > 7 ————— 应该改为 pop > 9
pop < -8 ———————— 应该改为 pop < 0
第一轮循环:rev=0 ,pop=3,X=12 , rev = 0 + pop = 3
第二轮:pop=12%10= 2,X=12/10= 1, rev=3*10+pop= 32
32>19 直接溢出return 0;
例子2:此图转载于该链接:画解算法:7. 整数反转
心得:自己举个例子,一句句在草稿上代入运行下。也可记录一个简单的例子,之后看代码看着着这个例子就可以知道每行代码的作用。就像数据库说起关系,脑中就浮现出学生课程表的例子一样,这些对我来说都让我更好理解。