9. Palindrome Number*
https://leetcode.com/problems/palindrome-number/description/
题目描述
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Example 2:
Example 3:
Follow up:
Coud you solve it without converting the integer to a string?
解题思路
这道题使用将数字转换为字符串可以很简单搞定. 转换为字符串之后使用对撞指针.
但是题中说了不用这种方法. 那么可以按如下步骤解决, 当然 leetcode 官方也给了解答: https://leetcode.com/problems/palindrome-number/solution/
使用数学的方法:
- 首先舍去一些特殊的情况, 比如
x < 0
或者 x
是以 0 结尾(除零之外)的整数. - 判断一个正整数是否为回文的, 比如
12321
, 设置 revertedNumber
来获得从右向左读的数字, 方法是从 x
中不断 pop
出最右边的数字.
当然, 可以将 x
不断除以 10 最后到 0, 然后判断 revertedNumber
是否与原来的 x
相等, 但此处可以让 while
循环中的判断变为 while (x > revertedNumber)
, 如果 x
是回文的, 那么最后只需要判断 x == revertedNumber
或者 x == revertedNumber / 10
是否成立, 对于前一种情况比如 1221 这种完全对称的数字, 那么当 while
循环跳出时 x
和 revertedNumber
都为 12; 而对于第二种情况, 比如 12312
, while
循环跳出时, x
为 12, 而 revertedNumber
为 123, 这样就需要判断 x
是否等于 revertedNumber / 10
了.
C++ 实现 1