当前位置:   article > 正文

算法02:回文数_第2关:回文数计算

第2关:回文数计算

回文数

问题:

给你一个整数x,如果x是一个回文整数,返回true;否则返回false。回文数是指正序(从左向右)和倒序(从右到左)读都是一样的整数。

示例1:

输入:x = 121

输出:true

示例2:

输入:x = -121

输出:false

解释:从左向右读,为-121。从右向左读,为121-。因此它不是一个回文数。

示例3:

输入:x = 10

输出:false

解释:从右向左读,为01。因此他不是一个回文数

算法:

方法一:普通解法
思路:

1、将整数转换为字符串,然后用双指针遍历字符串,比较指针指向的元素。

代码:
class Solution {
    public boolean isPalindrome(int x) {
        String n = x + "";
        int j = n.length() - 1;
        int i = 0;
        while (i < j){
            if(n.charAt(i) != n.charAt(j)){
                return false; 
            }
            i++;
            j--;
        }
        return true;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2、将整数转换为字符串,然后将字符串分割为数组,只需要循环数组的一行判断对应元素是否相等即可。

算法:
class Solution {
    public boolean isPalindrome(int x) {
        String n = x + ""; 
        String m = (new StringBuffer(n)).reverse()
            .toString();
        if(m.equals(n)){
            return true;
        }
        return false;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
方法二:数字解法
思路:

通过取整和取余操作获取整数中对应的数字进行比较。

举个例子:1221这个数字

  • ​ 通过计算1221、1000,得首位1
    • ​ 通过计算1221%10,可得末位
    • 进行比较
    • 再将22取出来继续比较
代码:
class Solution {
    public boolean isPalindrome(int x){
        if(x < 0) return false;
        int div = 1;
        while(x / div >= 10){
            div *= 10;
        }
        while(x > 0){
            int left = x / div;
            int right = x % 10;
            if(left != right)
                return false;
            x = (x % div) / 10;
            div /= 100;
        }
        return true;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
方法三:进阶
思路:

将后半段数字进行翻转。

具体做法:

  • 每次取余操作(%10),取出最低得数字:y = x % 10

  • 将最低的数字加到取出数的末尾:revertNum = revertNum * 10 + y

  • 每取一个最低位数字,x都要自除以10

  • 判断x是不是小于revertNum,当它小于的时候,说明数字已经对半或过半了

  • 最后,判断奇偶数的情况:如果是偶数的话,revertNum和x相等;如果是奇数的话,最中间的数字就在revertNum的最低位上,将它除以10以后应该和x相等

代码:
class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0 || (x % 10 ==0 && x != 0))
            return false;
        int revertNumber = 0;
        while(x > revertNumber) {
            revertNumber = revertNumber * 10 + x % 10;
            x /= 10;
        }
        return x == revertNumber || x == revertNumber / 10;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

愿你开心每一天!!!!

img

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/934767
推荐阅读
相关标签
  

闽ICP备14008679号