数组:整数反转

题目:

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;//将符号和数值相乘
    }
posted @   福尔摩才  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示