Leetcode刷题(一)-回文数的判断

给你一个整数 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;
    }
}


优点: 容易理解

缺点: 占用内存大

Leetcode刷题(一)-回文数的判断



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;
    }
}


执行时间有所优化,内存占用没有太大提升

Leetcode刷题(一)-回文数的判断



3. 将数字分为两半

看了题解...

将给定的数字分为两半,前一半和后一半比较

比如 1221 前一半为12 后一半为21(反转后为12),这样去比较

class Solution {
    public boolean isPalindrome(int x) {
        // 排除边界
        if(x==0){
            return true;
        }
        if(x%10==0 || x<0){
            return false;
        }
        // 将数字分为两半 获取后一半数字
        int halfnum = 0;
        while(halfnum<x){
            halfnum = halfnum*10 + x%10;
            x/=10;
        }
        // 分成两半的时候需要区分偶数和基数,偶数可以直接== 奇数就需要排除后一半的一位 /10
        return halfnum == x || halfnum/10 == x;
    }
}


Leetcode刷题(一)-回文数的判断

效率100%,但是内存占用还是比较高

上一篇:Linux磁盘管理相关命令


下一篇:服务网格(Service Mesh)是什么?