力扣题目
解题思路
java代码
力扣题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2 31, 2 31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题思路:
reverse1方法的思路是通过循环,每次将结果r乘以10再加上s的最后一位,然后将s除以10,继续循环直到s为0。在每次计算的过程中,通过判断r是否越界来避免溢出的情况。如果溢出则返回0,否则返回反转后的整数r。
reverse2方法的思路类似,也是通过循环逐步反转整数。不同的是,这里使用了一个long类型的变量n来存储反转后的结果,以避免整数溢出的情况。最后将long类型的n强制转换为int类型,如果转换后的结果与n相等,则返回转换后的int类型结果,否则返回0。
java代码:
package org.example;
public class LeetcodeShaowei2 {
public static void main(String[] args) {
System.out.println(reverse1(123));
System.out.println(reverse2(123));
}
// 反转
public static int reverse1(int s) {
int r = 0;
while (s != 0) {
int temp = r * 10 + s % 10;
if (temp / 10 != r)
return 0;
r = temp;
s /= 10;
}
return r;
}
public static int reverse2(int x) {
long n = 0;
while (x != 0) {
n = n * 10 + x % 10;
x = x / 10;
}
return (int) n == n ? (int) n : 0;
}
}