link: https://leetcode-cn.com/problems/palindrome-number/description/spa
問題:code
判斷一個整數是不是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是同樣的整數。blog
示例 1:ip
輸入: 121 輸出: true
示例 2:leetcode
輸入: -121 輸出: false 解釋: 從左向右讀, 爲 -121 。 從右向左讀, 爲 121- 。所以它不是一個迴文數。
示例 3:字符串
輸入: 10 輸出: false 解釋: 從右向左讀, 爲 01 。所以它不是一個迴文數。
進階:get
你能不將整數轉爲字符串來解決這個問題嗎?it
見代碼io
/** * Created by feichen on 2018/5/9. * <p> * 判斷一個整數是不是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是同樣的整數。 * <p> * 示例 1: * <p> * 輸入: 121 * 輸出: true * 示例 2: * <p> * 輸入: -121 * 輸出: false * 解釋: 從左向右讀, 爲 -121 。 從右向左讀, 爲 121- 。所以它不是一個迴文數。 * 示例 3: * <p> * 輸入: 10 * 輸出: false * 解釋: 從右向左讀, 爲 01 。所以它不是一個迴文數。 * 進階: * <p> * 你能不將整數轉爲字符串來解決這個問題嗎? * <p> * <p> * 1 字符串 * 2 */ public class Id09Palindrome { public static void main(String[] args) { Id09Palindrome palindrome = new Id09Palindrome(); System.out.println(palindrome.isPalindrome(2147483647)); } public boolean isPalindrome(int x) { if (x < 0) { return false; } int size = String.valueOf(x).length(); int factor; if (size == 1) { return true; } else { factor = (int) Math.pow(10, size - 1) + 1; } //98 908 302 1000 if ((x + 1) % factor == 0) return false; int result = x % factor; int resultSizeLimit = getResultLimit(size); if (result != 0) { if (result % 10 != 0 || result < resultSizeLimit) { return false; } else { x = division(result); } } else { return true; } return isPalindrome(x); } /** * 餘數限制 100030001 餘數30000>10000 限制 1000021 * * @return */ private int getResultLimit(int size) { if (size % 2 == 0) { return (int) Math.pow(10, size / 2); } else { return (int) Math.pow(10, (size - 1) / 2); } } /** * make 330000->33 * * @param x * @return */ private int division(int x) { for (int i = String.valueOf(x).length(); i > 0; i--) { int tmp = (int) Math.pow(10, i - 1); if (x % tmp == 0) { return x / tmp; } } return 0; } }