本文首发于公众号「猿天罡」,转载请注明出处
个人网站:liuwynn.github.io
本题源自 LeetCode ,题号7。
1.题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
2.解题思路
题目的意思是:给定我们一个整数,让我们经过算法求解以后,返回给定整数的逆序整数,如给定 123,返回 321,值得注意的是,题目最后提醒了一下反转之和整数可能溢出的问题。
具体思路如下:
-
假设给定整数为
X
,我们都知道,X / 10
的值等于商的整数部分,X % 10
的值等于余数部分。 -
如果
X
是个位数,就直接返回即可; -
否则,我们就进入循环,当
X
最终变为个位数时,循环结束,循环过程如下:-
我们设置一个变量 reverseX 来接收X的逆序值,初始赋值为0;
-
然后把 reverseX 保存的值升一位(乘以10),再加上 X除以10的余数部分;
-
接着把 X除以10的商的整数部分赋值给X;
-
重复执行步骤2和步骤3,直至循环结束。
-
-
循环结束后,reverseX 再加上 X 的值即为最终结果。
3.算法动画
假设给定整数值 X 为 123,依照上面给出的解题思路,运行过程如下:
4.代码实现
个人精力有限,暂时只提供 Java 代码实现,后续可能会加入其他语言的实现代码,敬请期待哦~
4.1 Java实现
class Solution {
public int reverse(int x) {
long reverseX = 0;
while ((x / 10) != 0) {
reverseX = reverseX * 10 + (x % 10) * 10;
x = x / 10;
}
reverseX += x;
return (reverseX > Integer.MAX_VALUE || reverseX < Integer.MIN_VALUE) ? 0 : (int) reverseX;
}
}
5.结尾语
算法是计算机编程的灵魂,就算这个灵魂是不太好理解的亚子,所以我想通过绘制动画的方式,让同学们能感受到算法的青春和活力。
如果你觉得本文对你有所帮助的话,欢迎扫码关注公众号「猿天罡」。