一. 需求:整数反转
给你一个 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
/**
* 整数反转
* @param x
* @return
*/
private int getIntReversalOne(int x)
{
// 存倒叙的字符
String str = "";
// 判断是否是负数
if(x < 0){
// 绝对值
x = Math.abs(x);
// 提前让字符变负
str = "-";
}
// 将int数据转为string后再转为字符数组
char[] chars = (x + "").toCharArray();
// 从尾部遍历到头部,达到倒叙的效果
for (int i = chars.length -1; i >= 0; i--)
{
// 将字符拼接到字符串中
str += chars[i];
}
try
{
// 将字符串强制为Int并返回
return Integer.parseInt(str);
}
catch (Exception e)
{
e.printStackTrace();
return 0;
}
}
方法2
private int getIntReversalTwo(int x)
{
// 存储倒叙的值
long reversalNum = 0;
// 只要不为 0 都可以继续下去
while (x != 0)
{
/**
* 123为例
* reversalNum = 0 * 10 + 123 % 10 reversalNum = 3
* reversalNum = 3 * 10 + 12 % 10 reversalNum = 32
* reversalNum = 32 * 10 + 1 % 10 reversalNum = 321
*/
reversalNum = reversalNum * 10 + x % 10;
/**
* 123为例,因为是整数,小数点自动忽略
* x = 123
* x = 12
* x = 1
*/
x /= 10;
}
// 判断reversalNum是否在int范围内,超出返回0 ,否则返回强转reversalNum为int的值
return reversalNum > Integer.MAX_VALUE || reversalNum < Integer.MIN_VALUE ? 0 : (int) reversalNum;
}
作者:王子威
总结
- 学习了整数反转
- 算法兴趣+1
- 要明白了规律的重要性
- 欠缺:算法的思路感觉还是在面向过程的层面,要加油!!!