9. Palindrome Number

本文介绍两种判断数字是否为回文数的算法。第一种算法通过逆序比较原数与逆序数来判断;第二种算法通过倒置一半数字进行比较。详细解析了每种算法的实现过程、时间与空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述(简单)

在这里插入图片描述
题目含义:判断数字是不是回文数

解法一

比较简单,先把数字逆序输出。然后将原来的数字和逆序之后的数字进行比较。如果两者相同,返回true,否则返回false。

public class Palindrome_Number {
	public static int reverse(int x) {
	    int ans = 0;
        int x_copy=x;
        if(x < 0) return false;
        while(x!=0){
            int pop = x % 10;
            x = x / 10;
            ans = ans * 10 + pop;
        }
        return x_copy == ans;
    }	
	public static void main(String args[]) {
		int x=121;
		boolean answer=reverse(x);
		System.out.println(answer);
	}
}

在这里插入图片描述

如果将上述代码转换成python语言,首先false需要大写转换为False,其次在JAVA中/表示取整,而python用//表示取整。

class Solution(object):
    def isPalindrome(self, x):
        ans = 0
        x_copy=x
        if(x < 0):
            return False
        while(x!=0):
            pop = x % 10
            x = x // 10
            ans = ans * 10 + pop
        return x_copy == ans     

在这里插入图片描述
时间复杂度:和求转置一样,x 有多少位,就循环多少次,所以是 O(log(x)) 。

空间复杂度:O(1)。

解法二

采取的是倒置的方法。举例来说13531.我们只需要比较右半边31倒叙之后13是否和左半部分13相同。相同则返回true。当然,这里我们需要考虑数字分为偶数和奇数的情况。本质上没有什么差异。

class Solution {
    public boolean isPalindrome(int x) {
        if(x<0) return false;
		int digit=(int)(Math.log(x)/Math.log(10)+1);//总位数
		int revert=0;
		int pop=0;
		//倒置右半部分
		for(int i=0;i<digit/2;i++) {
			pop=x %10;
			revert=revert*10+pop;
			x/=10;
		}
		if(digit %2==0 && x==revert) return true;
		if(digit %2!=0 && x/10==revert) return true;
		return false;
	}	
}

在这里插入图片描述

时间复杂度:循环 x 的总位数的一半次,所以时间复杂度依旧是 O(log(x))。

空间复杂度:O(1),常数个变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安替-AnTi

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值