给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1: 输入:x = 121 输出:true 示例 2: 输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。 示例 4: 输入:x = -101 输出:false
1. 转为字符串判断
将给定的数字转为字符串,判断正向的字符串和逆向的字符串是否相等
class Solution { public boolean isPalindrome(int x) { String tempx = String.valueOf(x); String reversex = new StringBuffer(tempx).reverse().toString(); if(tempx.equals(reversex)){ return true; } return false; } }
优点: 容易理解
缺点: 占用内存大
2. 不使用字符串,直接对数字首尾判断
不使用字符串,直接对数字进行首尾判断
获取第一位数字使用除法可以得到
获取最后一位数字可以使用取模得到
class Solution { public boolean isPalindrome(int x) { // 排除边界 if(x==0){ return true; } if(x%10==0 || x<0){ return false; } // 获取数字的长度 int length = 1; while(x/length>=10){ length*=10; } // 循环判断首尾数字 while(x>0){ if(x/length!=x%10){ return false; } // 每次将头尾两个数字去掉,获取剩下的数字 x=(x%length)/10; // 长度每次都要除以100 length/=100; } return true; } }
执行时间有所优化,内存占用没有太大提升
3. 将数字分为两半
看了题解...
将给定的数字分为两半,前一半和后一半比较
比如 1221 前一半为12 后一半为21(反转后为12),这样去比较
效率100%,但是内存占用还是比较高