leetcode-9.-回文数


本题是leetcode,地址:9. 回文数

题目

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

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:

你能不将整数转为字符串来解决这个问题吗?

分析

此题有两种解法:1、变换为字符串;2、通过数字反转

字符串的回文很简单,双子针,一个从前往后,一个从后往前,判断字符是否相等即可,终止条件是双子针相等了,看代码;

code-字符串

public boolean isPalindrome(int x) {
      String s = x + "";
      char[] chars = s.toCharArray();
      int left = 0;
      int right = chars.length - 1;
      while(left <= right) {
        if(chars[left] != chars[right]) {
            return false;
        }
        left++ ;
        right--;
      }
      return true;
} 

code-数字反转

对于一个数字,我们对其%10操作,可以得到该数的最后一位数字,例如1221对10取余得到1,持续%10,则可以得到每一位数字,如果我们对每次取余数的数字乘10操作,则可以得到对应的反转数字;

当我们反转一半时,比较两个数是否相等即可;一半的判断条件就是不断取余的数组小于反转数字;

** 注:需要注意如果数字是121时,反转后我们得到两个数组1,12,直接舍弃最后一位数进行比较即可,看代码**

    public boolean isPalindrome(int x) {
      if(x == 0) return true;
      if(x < 0 || x % 10 == 0 ) return false;
      int rev = 0;
      while(x > rev) {
          rev = x % 10 + rev * 10;
          x = x / 10;
      }
      return x == rev || x  == rev / 10;
    }  

你的鼓励也是我创作的动力

打赏地址

posted @ 2020-07-19 15:16  Yangsc_o  阅读(141)  评论(0编辑  收藏  举报