天天看点

leetcode第七题

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123

输出: 321

示例 2:

输入: -123

输出: -321

示例 3:

输入: 120

输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

这个题目中需要注意的是如何翻转与是否会溢出

解决方案如下

通过设置一个中间值,每一次挪一位数字的方式进行反转

int rev=0;

while(x!=0){

pop = x%10;(取当前末尾数字)

x/=10;(取除末尾外的其他数字)

rev=rev*10+pop;(末尾数字前挪)

}

比如123

pop = 123 %10 -> pop = 3;

x = 123/10 -> x = 12;

rev = 0 * 10 + 3 -> rev = 3

pop = 2

x = 1

rev = 30 +2 =32

->321 逆转OK

现在考虑是否溢出

题目已给

最大值是2147483647

最小值-2147483648

在反转的最后一步的时候,才会可能产生溢出,若rev此时比max_int / 10大或者比 min_int / 10 小的话,那后面只要进位就会溢出。

最后 如果 rev = max_int / 10 或者 rev = min_int / 10时,就要考虑最后一位和 7 -8的大小比较,如果小于或等于7 大于或等于-8的话就没有产生溢出

此时就完成了反转数字

上一篇: PO SQL