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-xinjava

相关文章
相关标签/搜索