算法练习题---回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解法一:将数字反转后,直接比较两个数字的大小
package com.zx.leetcode.isPalindrome; /** * @Author JAY * @Date 2019/6/7 12:26 * @Description 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 **/ public class Solution { public static void main(String[] args) { System.out.println(isPalindrome(2147483647)); System.out.println(isPalindrome(121)); } public static boolean isPalindrome(int x) { //需要考虑数字反转之后是否超过int的界限 if(x < 0){ return false; } int y = x; String num = String.valueOf(x); int length = num.length(); double convertNum = 0; for(int i = length - 1; i >= 0 ; i--){ int high = (int) (x / Math.pow(10,i)); convertNum = convertNum + high * Math.pow(10,length - i - 1); x = (int) (x - high * Math.pow(10,i)); } if (convertNum == y){ return true; } return false; } }
解法二:通过取整和取余操作获取整数中对应的数字进行比较。
1 package com.zx.leetcode.isPalindrome; 2 3 /** 4 * @Author JAY 5 * @Date 2019/6/7 12:26 6 * @Description 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 7 **/ 8 public class SolutionV2 { 9 10 public static void main(String[] args) { 11 System.out.println(isPalindrome(2147483647)); 12 System.out.println(isPalindrome(121)); 13 } 14 15 public static boolean isPalindrome(int x) { 16 17 //需要考虑数字反转之后是否超过int的界限 18 //边界判断 19 if (x < 0) { 20 return false; 21 } 22 int div = 1; 23 // 24 while (x / div >= 10) { 25 div *= 10; 26 } 27 while (x > 0) { 28 int left = x / div; 29 int right = x % 10; 30 if (left != right) { 31 return false; 32 } 33 x = (x % div) / 10; 34 div /= 100; 35 } 36 return true; 37 } 38 }