题目描述
分析
1. 栈
利用栈的先进后出特点,将最大位数字顺序添加到栈中,再出栈对比数字的余数
2. 余数
获取数字的位数,对比最大和最小位数字,是否相等,如:1221 -> 1221/1000=1 1221/%10=1
代码实现
public enum Q9 {
instance;
public boolean isPalindrome(int x) {
Stack<Integer> stack = new Stack<>();
if(x>=0) {
int t = x;
while (t > 0) {
// 入栈
stack.push(t % 10);
t = t / 10;
}
while (!stack.empty()) {
// 出栈 对比数字
if (stack.pop() != x % 10) {
return false;
}
x = x / 10;
}
return true;
}
return false;
}
public boolean isPalindrome2(int x) {
if(x<0)return false;
int t=x;
int digit=1;
// 获取 位数 121 -> 100
while (t>=10){
t/=10;
digit=digit*10;
}
// 最大位数字
int l=x;
// 最小位数字
int r=x;
// 对比最大和最小位数字,是否相等
while (digit>0){
if(!(r%10==l/digit)){
return false;
}
l=l-l/digit*digit;
digit=digit/10;
r=r/10;
}
return true;
}
public static void main(String[] args) {
// assert true
System.out.println(Q9.instance.isPalindrome(121121));
// assert true
System.out.println(Q9.instance.isPalindrome(0));
// assert true
System.out.println(Q9.instance.isPalindrome(123321));
// assert true
System.out.println(Q9.instance.isPalindrome(12321));
// assert false
System.out.println(Q9.instance.isPalindrome(10));
// assert true
System.out.println(Q9.instance.isPalindrome(101));
// assert true
System.out.println(Q9.instance.isPalindrome2(121121));
// assert true
System.out.println(Q9.instance.isPalindrome2(0));
// assert true
System.out.println(Q9.instance.isPalindrome2(123321));
// assert true
System.out.println(Q9.instance.isPalindrome2(12321));
// assert false
System.out.println(Q9.instance.isPalindrome2(10));
// assert true
System.out.println(Q9.instance.isPalindrome2(101));
// assert true
System.out.println(Q9.instance.isPalindrome2(101101));
// assert false
System.out.println(Q9.instance.isPalindrome2(-101101));
}
}