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

相關文章
相關標籤/搜索