回文数

题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

题目来自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 }

 方法二是参考官方解答整理出来的自己的一些理解,更多更详细更好的解法可以点击前面的超链接到官网查看,

哪里写的不对了欢迎指正,每天刷一刷,先从简单的练练手

一起努力啊!!!!

 

posted @ 2020-08-04 23:03  jiew-c  阅读(526)  评论(0)    收藏  举报