导读概述
本章节分三篇
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/
• 后记 •
本系列算法文章,会从零基础建立数据结构和算法知识体系和算法思维。包括复杂度计算,常见的数据结构及操作,排序、递归、字符串匹配、搜索、贪心算法、分治算法、动态规划、回溯算法等。并且还会结合大厂的数据结构和算法面试题,讲解思路和解决方法。以及剖析数据结构和算法在互联网领域的常见应用,并且会不断持续更新分享给大家。
这套系列文章内容适用于初级程序员、高级程序员、架构师和一切喜欢研究算法追求细节的开发人员。如果感觉有所收获,可以动动小手指给点个赞,感谢阅读!