数组:整数反转
题目:
leetcode7:https://leetcode.cn/problems/reverse-integer/
给你一个 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
解决方案
解法一(暴力):逆序输出
public static int reverse(int x) {
//判断输入数据是否越界
if(x == Integer.MIN_VALUE || x == Integer.MAX_VALUE){
return 0;
}
int sign = x > 0 ? 1 : -1;//判断符号
x = x < 0 ? -x : x;//无论正负,都当成正数
//1.整数转字符串,再转字符数组
String str = String.valueOf(x);
char[] chars = str.toCharArray();
//2.反向遍历字符数组,并将元素存储到新数组中
int len = chars.length;
char[] array = new char[len];
for(int i = 0; i < len; i++){ //遍历新数组
array[i] = chars[len - 1 - i]; //将原数组的字符逆向赋给新数组
}
//3.新数组转成字符串,再转成整数输出
long value = Long.valueOf(String.valueOf(array));
boolean b = value > Integer.MAX_VALUE || value < Integer.MIN_VALUE;
int result = b ? 0 : (int)value;//溢出返回0
return result * sign;//将符号和数值相乘
}
解法二(优化):首位交换
public static int reverse(int x) {
//判断输入数据是否越界
if(x == Integer.MIN_VALUE || x == Integer.MAX_VALUE){
return 0;
}
int sign = x > 0 ? 1 : -1;//判断符号
x = x < 0 ? -x : x;//无论正负,都当成正数
//1.整数转字符串,再转字符数组
String str = String.valueOf(x);
char[] chars = str.toCharArray();
//2.交换首位和末尾的数字
//3.循环操作:依次交换第二(start++)和倒数第二个(end--)
int start = 0, end = chars.length - 1;
while(start < end){
char temp = chars[start];
chars[start] = chars[end];
char[end] = temp;
start++;
end--;
}
//3.新数组转成字符串,再转成整数输出
long value = Long.valueOf(String.valueOf(array));
boolean b = value > Integer.MAX_VALUE || value < Integer.MIN_VALUE;
int result = b ? 0 : (int)value;//溢出返回0
return result * sign;//将符号和数值相乘
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!