package com.example.demo.leecode;
import java.util.Stack;
/**
 * 判断回文整数
 * @Date 2020/11/26
 * @author Tang
 *
 * 请判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
 */
public class DeterminePalindrome {
    /**
     * 方法一  用栈数据结构,前一半先入栈,然后出栈和后一半逐个比较
     * @param x
     * @return
     */
    public boolean execute1(int x){
        int index = 0;
        if(x <= 0){
            return false;
        }
        String s = String.valueOf(x);
        char[] chars = s.toCharArray();
        Stack<Character> stack = new Stack<Character>();
        //判断奇偶
        if(chars.length % 2 == 0){
            //入队一半
            for(; index < chars.length/2; index++){
                stack.push(chars[index]);
            }
            //出队一半作比较
            //出现不一样的直接返回
            for(; index < chars.length; index++){
                if(stack.pop() != chars[index]){
                    return false;
                }
            }
        }else{
            for(; index < chars.length/2; index++){
                stack.push(chars[index]);
            }
            //过滤掉中位数
            index++;
            for(; index < chars.length; index++){
                if(stack.pop() != chars[index]){
                    return false;
                }
            }
        }
        return true;
    }
    /**
     * 方法二   将数字反转,然后直接比较
     * @param x
     * @return
     */
    boolean execute2(int x) {
        if (x<0){
            return false;
        }
        int sum =0;
        int origin = x;
        while(x != 0)
        {
            int num = x %10;
            sum = sum*10 + num;
            x/=10;
        }
        if(sum == origin){
            return true;
        }
            return false;
    }
    public static void main(String[] args) {
        DeterminePalindrome determinePalindrome = new DeterminePalindrome();
        System.out.println(determinePalindrome.execute1(5885));
    }
}