LeetCode刷题记录(二十六):回文数

这篇博客介绍了如何使用Java判断一个整数是否为回文数。作者提供了两种解题思路:第一种是将数字拆分成每一位存储在列表中,然后前后对比;第二种则是直接在获取每一位的过程中生成倒序数值,再与原数值比较。代码清晰易懂,分别展示了两种不同的实现方式。
摘要由CSDN通过智能技术生成

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第26天,点击查看活动详情

回文数

image.png

题目解析

题目素材解析

根据题目中的描述来看,提供的素材是一个整数。

  1. 一个整数x;没有别的注意事项。
我的解读

首先题目给出了一个回文数的概念:正序和倒序数值一样,也就是说一个整数,反过来之后与原来的数字依然相同。

例如,1999的倒序是9991,很明显不是回文数。1991的倒序是1991,很明显这个就是回文数。

从这道题出发,难点就在于如何获取数字每一位的数字。

至于如何获取到数字的每一位数字,方式很多,比如转换成字符串进行截取,通过除以10来保留每一位的数字都可以。

解题思路

解题思路也是遵循着获取数字的每一位数字为前导。

第一步,获取数组的每一位数字,放置到List集合中。这里我用的是除以10的方式,每次除以10后取余值保存下来。

第二步,因为要判断倒序是否一样,所以需要首尾相对比,利用一前一后的元素进行对比,只要有一个不相等就证明不是回文数。

更具体的看一下代码吧。

代码

```java class Solution { public boolean isPalindrome(int x) { if(x == 0){ return true; } if(x < 0 || x % 10 == 0){ return false; } List numList = getIntList(x); int n = numList.size(); n = n % 2 == 0 ? n : n - 1; int l = 1, r = 1; boolean flag = true; while(l + r <= n){ int lz = numList.get(l-1); int nz = numList.get(numList.size() - r); if(lz != nz){ flag = false; break; }else{ l++; r++; } } return flag; }

private List<Integer> getIntList(int x){
    List<Integer> list = new ArrayList<Integer>();
    while (x != 0){
        list.add(x % 10);
        x = x / 10;
    }
    return list;
}

} ```

执行结果

聊着天刷什么题都不行,搞得思路都错了,一下子提交错了好多次。

image.png

换一种方法

想了想,其实在将每一个值获取出来的过程中,直接生成一个倒序数值即可。最后再与初始值进行比对。

通过循环来将每一个数值进行拼接,随后获得一个倒序数值,进行比较即可。

代码如下:

```java class Solution {

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

private int getIntTen(int x){
    int n = 1;
    while (x >= 10){
        n = n * 10;
        x = x / 10;
    }
    return n;
}

} ```

速度稍快了一些,但是内存又稍多一些,看了看还有优化的空间。

image.png

Java代码本地执行

Java本地可调试代码,请参考github/Ijiran,可通过索引看到相应代码。

如下图所示:

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ijiran

一杯咖啡太贵,一块糖就可以

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值