力扣 9题 回文数
Question 9-palindrome number
解题思路
这是一道入门级别的简单题,大致解题思路这里记录两种:
- 暴力法
首先,负数一定不是回文数。
要判断自然数 x 是否为回文数,创建一个 int 类型的变量,循环地将 x 的最后一位“切割”下来,并“嫁接”到这个变量的末尾,这样,当 x 没有可以切下来的部分时,这个变量就成为了 x 的倒序数字。而 x 如果是“回文数”的话,这个变量就一定等于 x 原先的值。
复杂度分析: 时间:O(n) 空间:O(1)
- 首尾指针
首先,负数一定不是回文数。
我们可以将这个自然数 x 转化为一串字符序列,用一个指针指向这一序列的首位,定义为首指针,另一个指向末位(碎碎念:当然不是'\0',你懂的),定义为尾指针。
然后循环的重复:
- 查看首指针指向的字符与尾指针指向的字符是否相同,不同返回否,相同则执行第二步。
- 首指针指向后一个字符,尾指针指向前一个。
注:这里没有体现对两个指针是否越界、是否已经相遇的检查,但这一检查是必须的。
复杂度分析: 时间: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;
}
}
浙公网安备 33010602011771号