算法5分钟|如何实现整数的数字反转【逆序输出法】

本文通过漫画形式介绍了如何使用逆序输出法实现整数反转,包括代码实现、边界处理和溢出检查。并提供了一个Java代码示例,展示了如何将整数转换为字符数组,反向遍历并转换回整数。此外,还提及了数组的特点和复杂度分析的相关链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

导读概述

本章节分三篇

1、【如何实现整数的数字反转-逆序输出法】   

2、【如何实现整数的数字反转-首尾交换法】   

3、【如何实现整数的数字反转-数学思维升级法】   

    本文分享的是第一篇【逆序输出法】实现,其它两篇请关注后文,文章内容以通俗易懂的漫画形式呈现给大家~

数组逆序输出图解:

小扩展:数组的特点 1.数组容量固定不变。 2.需在创建数组时指定,使用连续的物理空间在存取数据 。 3.可以通过下标在O(1)的时间复杂度下读取数据。

本道题用到数组的特性,想对数组有更深入的理解,请点击 算法5分钟|浅入浅出【数组】一文,里面有细致的分享。

Code基本解法及编码实现:

/***
* 题目:整数反转
* 思路:暴力解法-逆序输出
* 1.整数转字符串,再转字符数组
* 2.反向遍历字符数组,并将元素存储到新数组中
* 3.将新数组转成字符串,再转成整数输出
** 注意事项:
* 边界问题
* 数组索引越界
* 数值溢出边界:溢出则返回0
* 细节问题
* 首位不为0
* 符号处理
* @param x 指定整数
* @return 反转后的整数,或0
*/
public  int reverse(int x){
//边界值
 if(Integer.MIN_VALUE==x){
    return 0;
 }
 int sign = x>0?1:-1;//记录符号位
 int data = x>0?x:x*sign;//无论正负都当正数处理

// 1.整数转字符串,再转字符数组
 char[] oldChar = Integer.valueOf(data).toString().toCharArray();
// 2.反向遍历字符数组,并将元素存储到新数组中
 char[] newChar = new char[oldChar.length];
 for(int i=0;i<oldChar.length;i++){//遍历原始数组
    //将原始字符数据 返回遍历给新的newChar数组
    newChar[i]=oldChar[oldChar.length-1-i];
 }
 //3.将newChar新数组转成字符串,再转成整数输出
 long newLong = Long.valueOf(String.valueOf(newChar));
 //数值越界:溢出则返回0
 int reverse = newLong>Integer.MAX_VALUE?0:(int)newLong;
 //符号还原:符号*正数  返回反转后的结果
 return sign*reverse;
}

执行效果

/**执行效果 demo 主方法
* @param args
*/
public static void main(String[] args) {
int[] array = {123,-321,726380,Integer.MAX_VALUE,Integer.MIN_VALUE};
for (int arr:array){
  int result = reverse(arr);
  System.out.println("原整数值:"+arr+"||反转输出==>"+result);
 }
}

运行结果:

输出结果:
原整数值:123||反转输出==>321
原整数值:-321||反转输出==>-123
原整数值:726380||反转输出==>83627
原整数值:2147483647||反转输出==>0
原整数值:-2147483648||反转输出==>0

想对复杂度有更深入的理解,请点击【干货|算法复杂度分析看这一篇就够了】一文,里面有细致的分享。

耗时

注:题目来源:

Leetcode 7: https://leetcode-cn.com/problems/reverse-integer/

• 后记 •

本系列算法文章,会从零基础建立数据结构和算法知识体系和算法思维。包括复杂度计算,常见的数据结构及操作,排序、递归、字符串匹配、搜索、贪心算法、分治算法、动态规划、回溯算法等。并且还会结合大厂的数据结构和算法面试题,讲解思路和解决方法。以及剖析数据结构和算法在互联网领域的常见应用,并且会不断持续更新分享给大家。

这套系列文章内容适用于初级程序员、高级程序员、架构师和一切喜欢研究算法追求细节的开发人员。如果感觉有所收获,可以动动小手指给点个赞,感谢阅读!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值