当前位置:   article > 正文

算法5分钟|如何实现整数的数字反转【首尾交换法】_数字翻转算法

数字翻转算法

导读概述

本章节分三篇

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

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

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

    本文分享的是第二篇【首尾交换法】实现,其它两篇请关注后文,文章内容以通俗易懂的漫画形式呈现给大家~

     注:在观看本篇建议提前阅读章节一[如何实现整数的数字反转-逆序输出法],对阅读本篇很有帮助~

Code基本解法及编码实现:

  1. /**
  2. *优化解法->首尾交换思路: 
  3. * 1.整数转字符串,再转字符数组 
  4. * 2.交换首位(start)和末位(end)数字 
  5. * 3.循环操作:依次交换第二(start++)和倒数第二个(end--) 
  6. * 直到数组剩下1个或0个元素 
  7. * 4.将原数组转成字符串,再转成整数输出 
  8. ** 注意事项: 
  9. * 边界问题 
  10. * 数组索引越界:数组长度为偶数,反转完成标志为start>end; 
  11. * 为奇数时反转完成标志为start==end 
  12. * 数值溢出边界:溢出则返回0 
  13. * 细节问题 
  14. * 首位不为0 
  15. * 符号处理 
  16. @param x 指定整数 
  17. @return 反转后的整数,或0
  18. */
  19. public  int reverse(int x){
  20.   //数值越界处理
  21.   if(x==Integer.MIN_VALUE){
  22.       return 0;
  23.   }
  24.   //提取符号
  25.   int sign = x>0?1:-1;
  26.   //提取正数
  27.   int data = x>0?x:sign*x;
  28.   //1、原正数转成字符串,再转成字符数组 目的,进行遍历返转使用
  29.   char[] chars = String.valueOf(Integer.valueOf(data)).toCharArray();
  30.   //2、交换首位start++ 和末位数字 end--
  31.   int start = 0 ;
  32.   int end = chars.length-1;
  33.   //3、循环操作:依次交换第二start++和倒数end--
  34.   while (start<end){//start>=end截止完成
  35.       //交换两端等距离的元素
  36.       char tmp = chars[start];
  37.       chars[start]=chars[end];
  38.       chars[end] = tmp;
  39.       start++;
  40.       end--;
  41.   }
  42.   //4、将原数组转成字符串,再转成整数输出
  43.   long charLong = Long.valueOf(new String(chars));
  44.   //边界校验 转成int
  45.   int reverse = (charLong>Integer.MAX_VALUE||charLong<Integer.MIN_VALUE)?0:(int)charLong;
  46.   //返回反转真实结果  正数*标识
  47.   return reverse*sign;
  48. }

执行main方法

  1. public static void main(String[] args) {
  2. int[] array = {123,-321,726380,Integer.MAX_VALUE,Integer.MIN_VALUE};
  3. for (int arr:array){
  4.     int result = reverse(arr);
  5.     System.out.println("原整数值:"+arr+"||反转输出==>"+result);
  6. }
  7. }

运行效果:

  1. 原整数值:123||反转输出==>321
  2. 原整数值:-321||反转输出==>-123
  3. 原整数值:726380||反转输出==>83627
  4. 原整数值:2147483647||反转输出==>0
  5. 原整数值:-2147483648||反转输出==>0

知识小扩展:

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

注:题目来源:Leetcode 7:

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

 • 后记 • 

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

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

微信扫码关注公共账号!!

作者公共账号文章地址:算法5分钟|如何实现整数的数字反转【首尾交换法】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据灵魂/article/detail/60493
推荐阅读
相关标签
  

闽ICP备14008679号