2119-反转两次的数字

Raphael Liu Lv10

反转 一个整数意味着倒置它的所有位。

  • 例如,反转 2021 得到 1202 。反转 12300 得到 321不保留前导零

给你一个整数 num反转 num 得到 reversed1接着反转 reversed1 得到
reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false

示例 1:

**输入:** num = 526
**输出:** true
**解释:** 反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。

示例 2:

**输入:** num = 1800
**输出:** false
**解释:** 反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。 

示例 3:

**输入:** num = 0
**输出:** true
**解释:** 反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。

提示:

  • 0 <= num <= 106

方法一:数学

提示 1

一个数字进行两次反转操作不变的充要条件为:在两次反转操作前后数字的位数均不变。

提示 1 解释

首先考虑充分性。如果操作前后位数不变,则反转操作等价于数字对应的十进制字符串的反转操作,而字符串反转两次一定等于本身,因此该数字反转两次也为本身。

其次考虑必要性。对于一个数进行反转操作,它的位数一定不会增加。因此进行两次反转操作后得到的数仍然等于原数,操作过程中必须保证数字位数不变。

思路与算法

根据 提示 1 以及取值范围,我们需要找出两次反转操作前后数字位数均不变的(正)整数。

对于 0,进行两次反转操作后仍然为 0。

考虑任意非零正整数,由于反转操作前后均不保留前导零,因此:

  • 对于第一次反转操作,位数不变的充要条件即为该整数结尾不含 0

  • 对于第二次反转操作,由于第一次操作前的整数不含前导零,因此第二次操作前的整数结尾也不含 0,第二次操作前后位数不会改变。

综上,非负整数进行两次反转操作不变的充要条件即为:该整数为 0 或该整数结尾不含 0。而后者等价于该数模 10 的余数不为 0。我们按照该条件判断并相应返回结果即可。

代码

[sol1-C++]
1
2
3
4
5
6
class Solution {
public:
bool isSameAfterReversals(int num) {
return num == 0 || num % 10 != 0;
}
};
[sol1-Python3]
1
2
3
class Solution:
def isSameAfterReversals(self, num: int) -> bool:
return num == 0 or num % 10 != 0

复杂度分析

  • 时间复杂度:O(1)。

  • 空间复杂度:O(1)。

 Comments
On this page
2119-反转两次的数字