整数反转 -- 算法
一. 需求:整数反转
给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
[方法二的图解]
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
-231 <= x <= 231 - 1
思路写在注释中
1 /** 2 * 整数反转 3 * @param x 4 * @return 5 */ 6 private int getIntReversalOne(int x) 7 { 8 // 存倒叙的字符 9 String str = ""; 10 11 // 判断是否是负数 12 if(x < 0){ 13 // 绝对值 14 x = Math.abs(x); 15 // 提前让字符变负 16 str = "-"; 17 } 18 // 将int数据转为string后再转为字符数组 19 char[] chars = (x + "").toCharArray(); 20 // 从尾部遍历到头部,达到倒叙的效果 21 for (int i = chars.length -1; i >= 0; i--) 22 { 23 // 将字符拼接到字符串中 24 str += chars[i]; 25 26 } 27 try 28 { 29 // 将字符串强制为Int并返回 30 return Integer.parseInt(str); 31 } 32 catch (Exception e) 33 { 34 e.printStackTrace(); 35 return 0; 36 } 37 }
作者:王子威
1 private int getIntReversalTwo(int x) 2 { 3 // 存储倒叙的值 4 long reversalNum = 0; 5 // 只要不为 0 都可以继续下去 6 while (x != 0) 7 { 8 /** 9 * 123为例 10 * reversalNum = 0 * 10 + 123 % 10 reversalNum = 3 11 * reversalNum = 3 * 10 + 12 % 10 reversalNum = 32 12 * reversalNum = 32 * 10 + 1 % 10 reversalNum = 321 13 */ 14 reversalNum = reversalNum * 10 + x % 10; 15 /** 16 * 123为例,因为是整数,小数点自动忽略 17 * x = 123 18 * x = 12 19 * x = 1 20 */ 21 x /= 10; 22 } 23 // 判断reversalNum是否在int范围内,超出返回0 ,否则返回强转reversalNum为int的值 24 return reversalNum > Integer.MAX_VALUE || reversalNum < Integer.MIN_VALUE ? 0 : (int) reversalNum; 25 } 26 作者:王子威
- 学习了整数反转
- 算法兴趣+1
- 要明白了规律的重要性
- 欠缺:算法的思路感觉还是在面向过程的层面,要加油!!!
* 博客文章部分截图及内容来自于学习的书本及相应培训课程,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* 备注:王子威
* 我的网易邮箱:wzw_1314_520@163.com