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