难度简单3046
给你一个 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
通过次数814,457提交次数2,303,453
解题思路:
将一个正整数反转的核心思想在于:一个while()循环,%10-取模10不断得到该数的个位数,/10-除以10不断刷新该数的个位数;最终,将该数的每一位依次从右往左一一获取。
package zyh.springcloud.chapter2.service.impl.algorithm;
/**
* @ClassName ReverseInteger
* @Author zhangyonghui
* @Description : 整数反转 (https://leetcode-cn.com/problems/reverse-integer/)
* @Date 2021/9/7 17:17
* @Version 1.0
**/
public class ReverseInteger {
public static void main(String[] args) {
int i = reverse(0);
System.out.println("i = " + i);
}
/**
* @param x
* @return
*/
public static int reverse(int x) {
long out;
if (x == 0) {
return 0;
} else if (x < 0) { //如果输入的是一个负数:
int x2 = x * (-1); //先转为正数
//将正数反转:
long x3 = reverseZhengShu(x2);
//再转为负数:
out = x3 * (-1);
} else { //如果输入的是一个正数:
out=reverseZhengShu(x);
}
//如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
if (out < (Math.pow(2, 31) * (-1)) || out > (Math.pow(2, 31)) - 1) {
out = 0;
}
return (int) out;
}
/**
* 将一个正数进行反转:举例:1234、1200
* @param a
* @return
*/
public static long reverseZhengShu(long a) {
long b = 0L;
while (a > 0) {
b = b * 10;
b += a % 10;
a = a / 10;
}
return b;
}
}