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

导读概述

本章节分三篇

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

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

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

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

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

Code基本解法及编码实现:

/**
*优化解法->首尾交换思路: 
* 1.整数转字符串,再转字符数组 
* 2.交换首位(start)和末位(end)数字 
* 3.循环操作:依次交换第二(start++)和倒数第二个(end--) 
* 直到数组剩下1个或0个元素 
* 4.将原数组转成字符串,再转成整数输出 
** 注意事项: 
* 边界问题 
* 数组索引越界:数组长度为偶数,反转完成标志为start>end; 
* 为奇数时反转完成标志为start==end 
* 数值溢出边界:溢出则返回0 
* 细节问题 
* 首位不为0 
* 符号处理 
* @param x 指定整数 
* @return 反转后的整数,或0
*/
public  int reverse(int x){
  //数值越界处理
  if(x==Integer.MIN_VALUE){
      return 0;
  }
  //提取符号
  int sign = x>0?1:-1;
  //提取正数
  int data = x>0?x:sign*x;
  //1、原正数转成字符串,再转成字符数组 目的,进行遍历返转使用
  char[] chars = String.valueOf(Integer.valueOf(data)).toCharArray();
  //2、交换首位start++ 和末位数字 end--
  int start = 0 ;
  int end = chars.length-1;
  //3、循环操作:依次交换第二start++和倒数end--
  while (start<end){//start>=end截止完成
      //交换两端等距离的元素
      char tmp = chars[start];
      chars[start]=chars[end];
      chars[end] = tmp;
      start++;
      end--;
  }
  //4、将原数组转成字符串,再转成整数输出
  long charLong = Long.valueOf(new String(chars));
  //边界校验 转成int
  int reverse = (charLong>Integer.MAX_VALUE||charLong<Integer.MIN_VALUE)?0:(int)charLong;
  //返回反转真实结果  正数*标识
  return reverse*sign;
}

执行main方法

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/

 • 后记 • 

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

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

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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值