Palindrome Number --leetcode

package com.helloxin.leetcode.algorithms;

/**
 * Determine whether an integer is a palindrome. Do this without extra space.
 */
public class PalindromeNumber {

    /**
     * 判断是不是回文数 我想就是判断 字符串反转 是不是和原来的相等 当然是用Stack栈 先进后出也是这样的效果
     *
     * @param x
     * @return
     */
    public static boolean isPalindrome(int x) {

        boolean result = false;
        StringBuffer numStr = new StringBuffer(x+"");
        if (numStr.toString().equals(numStr.reverse().toString())){
            result = true;
        }
        return result;
    }

    /**
     * 转换成字符串是比较偷懒的,然后现在我们就用 数值类型判断下
     * 这边比较麻烦的就是0的处理
     * @param x
     * @return
     */
    public static boolean isPalindrome2(int x) {

        //负数
        if(x < 0) {
            return false;
        }

        int len = 1;
        while(x / len >= 10) {
            len *= 10;
        }

        while(x > 0){
            System.out.println(x+" "+len);
            //获取头尾数据  这边左边0处理 会比 len 小
            int left = x / len;
            int right = x % 10;

            if(left != right) {
                return false;
            }
            else  {
                //移除头尾数据
                x = (x % len) / 10;
                len /= 100;
            }
        }
        return true;
    }

    /**
     * reverse string
     * @param s
     * @return
     */
    public  String reverse2(String s) {
        int length = s.length();
        String reverse = "";
        for (int i = 0; i < length; i++) {
            reverse = s.charAt(i) + reverse;
        }
        return reverse;
    }

    /**
     * 以前写 c++ 干过不少这样的  因为C++中String类型的可以向数组这样处理,但是java需要调用charAt方法
     * @param orig
     * @return
     */
    public static String reverse3(String orig) {
        char[] s = orig.toCharArray();
        int n = s.length - 1;
        int halfLength = n / 2;
        for (int i = 0; i <= halfLength; i++) {
            char temp = s[i];
            s[i] = s[n - i];
            s[n - i] = temp;
        }
        return new String(s);
    }

    /**
     * 一般情况下 有现成的方法 也不会去用这个异或操作
     * @param s
     * @return
     */
    public  String reverse4(String s) {

        char[] str = s.toCharArray();

        int begin = 0;
        int end = s.length() - 1;
        while (begin < end) {
            str[begin] = (char) (str[begin] ^ str[end]);
            str[end] = (char) (str[begin] ^ str[end]);
            str[begin] = (char) (str[end] ^ str[begin]);
            begin++;
            end--;
        }
        return new String(str);
    }

    public static void main(String[] args) {
        System.out.println(isPalindrome2(1410110141));
        System.out.println(Integer.MAX_VALUE);
    }
}

git地址:https://github.com/woshiyexinjie/leetcode-xin

转载于:https://my.oschina.net/u/2277632/blog/1586890

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值