力扣 9题 回文数

Question 9-palindrome number

解题思路

这是一道入门级别的简单题,大致解题思路这里记录两种:

  • 暴力法
    首先,负数一定不是回文数。
    要判断自然数 x 是否为回文数,创建一个 int 类型的变量,循环地将 x 的最后一位“切割”下来,并“嫁接”到这个变量的末尾,这样,当 x 没有可以切下来的部分时,这个变量就成为了 x 的倒序数字。而 x 如果是“回文数”的话,这个变量就一定等于 x 原先的值。

复杂度分析: 时间:O(n) 空间:O(1)

  • 首尾指针
    首先,负数一定不是回文数。
    我们可以将这个自然数 x 转化为一串字符序列,用一个指针指向这一序列的首位,定义为首指针,另一个指向末位(碎碎念:当然不是'\0',你懂的),定义为尾指针。
    然后循环的重复:
  1. 查看首指针指向的字符与尾指针指向的字符是否相同,不同返回否,相同则执行第二步。
  2. 首指针指向后一个字符,尾指针指向前一个。
    注:这里没有体现对两个指针是否越界、是否已经相遇的检查,但这一检查是必须的。

复杂度分析: 时间:O(n) 空间:O(n)

代码

  • 暴力法
class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) return false;

        int rev = 0;
        int temp = x;
        while (temp > 0) {
            rev *= 10;
            rev += temp % 10;
            temp /= 10;
        }

        return x == rev;
    }
}
  • 首尾指针
class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) return false;

        String num = "" + x;
        int head = 0;
        int tail = num.length() - 1;
        while (head < tail && tail > 0) {
            if (num.charAt(head) != num.charAt(tail)) return false;
            head ++;
            tail --;
        }

        return true;
    }
}
posted @ 2021-07-08 15:47  寻落英以得度  阅读(94)  评论(0)    收藏  举报