1, 题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

  1. 输入: 121
  2. 输出: true

示例 2:

  1. 输入: -121
  2. 输出: false
  3. 解释: 从左向右读, -121 从右向左读, 121- 。因此它不是一个回文数。

示例 3:

  1. 输入: 10
  2. 输出: false
  3. 解释: 从右向左读, 01 。因此它不是一个回文数。

进阶:

你能不将整数转为字符串来解决这个问题吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2, 算法

1, 逆序数

  1. 第一步, 排除负数
  2. 第二步, 求逆序数
  3. 第三步, 比较
  1. object Solution {
  2. def isPalindrome(x: Int): Boolean = {
  3. if (x < 0) {
  4. return false
  5. }
  6. val x_rev = reverse_order(x)
  7. return x_rev == x
  8. }
  9. def reverse_order(x: Int): Int = {
  10. var a = x
  11. val queue = scala.collection.mutable.Queue[Int]()
  12. while (a != 0) {
  13. queue.enqueue(a % 10)
  14. a /= 10
  15. }
  16. var p = 0
  17. while (queue.nonEmpty) {
  18. p = p * 10 + queue.dequeue()
  19. }
  20. p
  21. }
  22. }
#python 实现
class Solution:
    def isPalindrome(self, x: int) -> bool:
        x_orignal=x
        if x < 0:
            return False
        import queue
        q = queue.Queue()
        while x != 0:
            q.put(x % 10)
            x = x // 10
        x_rev = 0
        while not q.empty():
            x_rev = x_rev * 10 + q.get()
        return x_orignal == x_rev