用双端队列解决回文串判定

9.题目链接-来源:力扣(LeetCode)(简单)

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 

示例 1:

输入:x = 121
输出:true

####思路:
首先排除负数,因为负号 ‘-‘ 只可能出现在一侧。
然后想到有一种数据结构天然就很适合处理回文,那就是双向队列 Deque,Java中 LinkedList 实现了Deque接口,所以我们可以直接拿来用。将 x 逐位取余数分离出来,入队。最后不停弹出首尾元素进行比较 removeFirst() == removeLast ? ,在 size() 等于0或1的时候返回即可。这样也自动规避了溢出问题。
另外像题解的方法比较巧妙,只比较一半长度的回文数,但是它仍要对后半部分作出处理,所以时间上并不会有什么优势。
时间复杂度:O(logn)
空间复杂度:O(1)

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}

LinkedList buffer = new LinkedList();
while (x != 0) {
buffer.addLast(x % 10);
x /= 10;
}

while (buffer.size() != 0 && buffer.size() != 1) {
if (buffer.removeFirst() != buffer.removeLast()) {
return false;
}
}

return true;
}
}