回文数
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
题目来自LeetCode官网,[点击这里](https://leetcode-cn.com/problems/palindrome-number/)可查看原题
示例1:
输入:121 输出:121 则可以说明121是回文数
示例2:
示例1: 输入:-121 输出:121- 则可以说明-121不是回文数
方法一:
首先我笨方法想到的是将整数转化为StringBuffer,然后进行反转在与原来的字符串使用equals方法进行比较,代码如下
1 import java.lang.StringBuffer; 2 3 class Solution{ 4 public String reorder(String str){ //定义方法,将String类型转换为StringBuffer类型进行反转 5 return new StringBuffer(str).reverse().toString(); 6 } 7 public boolean isPalindrome(int x) { 8 String s = String.valueOf(x); //将int转换为String 9 if(s.equals(reorder(s))) { //与反转之后的结果进行比较,是否一致 10 return true; 11 } 12 return false; 13 } 14 } 15 public class Palindrome { 16 public static void main(String[]args) { 17 System.out.println("该数据是否是回文数" + new Solution().isPalindrome(162)); 18 } 19 }
这种方法虽然很简单很容易想到,但是弊端也随之显现出来,可以看到很是可怜的数据,证明可以改动的空间话有很大

方法二:
给定一个数,如果这个数是负数肯定不符合要求,或者这个是是以0结尾的数字也就是 x % 10 == 0; 也不符合要求,剔除这两种就可以考虑其他情况了,
想要比较这个数是不是回文数,就是将这个数从中间切开,观察是否对称,可以想到使用秋末运算符“%”,这样可以获得一个整数的最后一位数字,然后循环这个整数位数的二分之一次。两次取模的数相加,之前除以10,所以相加时需要加上10.
这还是有一个问题,如何确定循环的次数呢,我们只需要循环位数的二分之一次,所以在每次求取反的整数时,将原来的整数也除以十,这样一个每次加一位,一个每次减少一位,直接通过比较大小即可确定需要循环的次数,观察流程图:

如果x大于反转之后的数字,将继续循环,否则的话返回revertedNumber与x的值,此时还需要注意x时奇数位还是偶数位,如下图

可以看出当x位偶数位时,直接比较x的值与revertedNumber的值即可,但是如果是奇数位的话就需要将revertedNumber除以十,去除最后一位,再与x进行比较,奇数位中的只能与自己相比,所以总是相等的。
完整的代码如下:
1 import java.lang.StringBuffer; 2 3 class Solution{ 4 public boolean isPalindrome(int x) { 5 if(x < 0 || (x > 0 && x % 10 == 0)) { //去除负数和0结尾的数 6 return false; 7 } 8 int revertedNumber = 0; 9 while(x > revertedNumber) { 10 revertedNumber = revertedNumber*10 + x%10; 11 x /= 10; 12 } 13 //奇数除以10,去除中间的一位 14 return x == revertedNumber || x == revertedNumber/10; 15 } 16 }
方法二是参考官方解答整理出来的自己的一些理解,更多更详细更好的解法可以点击前面的超链接到官网查看,
哪里写的不对了欢迎指正,每天刷一刷,先从简单的练练手
一起努力啊!!!!

浙公网安备 33010602011771号