LeetCode9:回文数(栈-字符串)

回文数

1、判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:
输入: 121
输出: true

示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

方法1:转化为字符串

 	/**
     * 判断一个数字是否是回文数:转化为字符串,通过双指针
     * @param x
     * @return
     */
    public boolean isPalindrome(int x) {

        String s = x+"";
        int left = 0;
        int right = s.length()-1;

        while (left < right){
            if(s.charAt(left) != s.charAt(right)){
                return false;
            }else{
                left ++;
                right --;

            }
        }
        return true;
    }
	/**
     * 通过StringBuilder翻转一个字符串,然后判断与之前的字符串是否相同
     * @param x
     * @return
     */
    public boolean isPalindrome2(int x){

        String s1 = x+"";
        String s2 = new StringBuilder(x+"").reverse().toString();
        return s1.equals(s2);

    }

方法2:取模、除法运算


    /**
     * 判断一个数字是否是回文数:取模、除法运算获得翻转后的数字,然后比较与传入的数字是否相同
     * @param x
     * @return
     */
    public boolean isPalindrome3(int x){
        //负数,返回false
        if(x < 0){
            return false;
        }

        int oldNum = x;
        //翻转后的数字
        int num = 0;

        while(x != 0){
            int rest = x%10;
            int newNum = num*10 +rest;
            //判断翻转后时候会溢出
            if((newNum - rest)/10 != num){
                return false;
            }
            num = newNum;
            x = x/10;
        }

        return num == oldNum;

    }

方法3:利用栈:先进后出

  	/**
     * 判断一个数字是否是回文数:利用栈
     * @param x
     * @return
     */
    public boolean isPalindrome4(int x){
        if(x <0){
            return false;
        }
        Stack<Character> stack = new Stack<Character>();
        String s = x+"";
        for(int i = 0 ; i<s.length();i++){
            stack.push(s.charAt(i));
        }

        StringBuilder sb = new StringBuilder();
        while (stack.size()>0){
            sb.append(stack.pop());
        }
        String s2 = sb.toString();

        return s2.equals(s);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值