整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
最优解决方案
去掉符号单独处理。使用一个变量来存储反转后的数字,然后每次从原始数字的末尾取出一位数字,反转后的数字乘以 10 并加上末尾数字。它必须小于等于(INT_MAX-末尾数字) / 10 才能继续乘以 10,否则就返回 0。
假设我们要反转一个三位数 123。我们可以用以下步骤来实现:
- 初始化一个变量 rev = 0,用来存储反转后的数字。
- 取出原始数字 x 的最低位,即 x % 10 = 3,并将其乘以 10 并加到 rev 上,即 rev = rev * 10 + x % 10 = 0 * 10 + 3 = 3。
- 将原始数字 x 右移一位,即 x = x / 10 = 123 / 10 =12。
- 检查 rev 是否超过了 [-2^31,2^31-1] 的范围,如果超过了就返回0。
- 取出原始数字 x 的最低位,即 x % 10 =2,并将其乘以10并加到rev上,即rev=rev10+x%10=310+2=32。
- 将原始数字x右移一位,即x=x/10=12/10=1。
- 检查rev是否超过了[-2^31,2^31-1]的范围,如果超过了就返回0。
- 取出原始数字x的最低位,即x%10=1,并将其乘以10并加到rev上,即rev=rev10+x%10=32*10+1=321。
- 将原始数字x右移一位,即x=x/10=1/10=0。
- 检查rev是否超过了[-2^31,2^31-1]的范围,如果超过了就返回0。
- 返回rev作为结果。