Easy
题目描述
给你一个整数 n。
定义它的镜像距离为:abs(n - reverse(n)),其中 reverse(n) 是通过反转 n 的数字形成的整数。
返回表示 n 的镜像距离的整数。
abs(x) 表示 x 的绝对值。
示例 1:
输入:n = 25
输出:27
解释:
reverse(25) = 52。
因此,答案是 abs(25 - 52) = 27。
示例 2:
输入:n = 10
输出:9
解释:
reverse(10) = 01,即 1。
因此,答案是 abs(10 - 1) = 9。
示例 3:
输入:n = 7
输出:0
解释:
reverse(7) = 7。
因此,答案是 abs(7 - 7) = 0。
约束条件:
1 <= n <= 10^9
提示:
- 按描述进行模拟
解题思路
这道题要求计算一个整数与其数字反转后形成的整数之间的绝对差值。
解题思路:
问题的核心是实现数字反转功能。我们需要:
数字反转:将整数的各位数字进行反转。可以通过不断取余数和整除来实现,每次取出最后一位数字,然后构建反转后的数字。
计算绝对差值:得到反转数字后,计算原数字与反转数字的绝对差值。
实现方法:
- 使用循环不断取
n % 10得到最后一位数字 - 将反转数字乘以 10 再加上当前位数字来构建反转结果
- 同时将
n整除 10 去掉最后一位 - 重复直到
n为 0
注意事项:
- 当数字以 0 结尾时(如 10),反转后前导零会被忽略(变成 1)
- 单位数字反转后仍是自身,镜像距离为 0
- 需要处理整数范围内的所有情况
时间复杂度 O(log n),空间复杂度 O(1),其中 n 是输入数字的值。
代码实现
class Solution {
public:
int mirrorDistance(int n) {
int reversed = 0;
int temp = n;
while (temp > 0) {
reversed = reversed * 10 + temp % 10;
temp /= 10;
}
return abs(n - reversed);
}
};
class Solution:
def mirrorDistance(self, n: int) -> int:
reversed_n = 0
temp = n
while temp > 0:
reversed_n = reversed_n * 10 + temp % 10
temp //= 10
return abs(n - reversed_n)
public class Solution {
public int MirrorDistance(int n) {
int reversed = 0;
int temp = n;
while (temp > 0) {
reversed = reversed * 10 + temp % 10;
temp /= 10;
}
return Math.Abs(n - reversed);
}
}
var mirrorDistance = function(n) {
let reversed = 0;
let temp = n;
while (temp > 0) {
reversed = reversed * 10 + temp % 10;
temp = Math.floor(temp / 10);
}
return Math.abs(n - reversed);
};
复杂度分析
| 复杂度 | 分析 |
|---|---|
| 时间复杂度 | O(log n) - 需要遍历数字的每一位,位数为 log₁₀(n) |
| 空间复杂度 | O(1) - 只使用了常量级别的额外空间 |