leetcode第9题——*Palindrome Number

本文探讨了LeetCode第9题——如何判断一个整数是否为回文数,要求不使用额外空间。文章指出负数不是回文数,并提醒注意整数翻转时可能的溢出问题。作者提出一种解决方案,通过比较数字的高位和低位是否相等,使用计数变量避免额外空间,同时建议使用for循环以缩短运行时间。

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

题目

Determine whether an integer is a palindrome. Do this without extra space.

click to show spoilers.

Some hints:

Could negative integers be palindromes? (ie, -1)

If you are thinking of converting the integer to string, note the restriction of using extra space.

You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?

思路

题目要求不可以使用额外的存储空间,一般来说需要利用递归实现。注意提示:负数不是回文数,如果将整型数转换为字符串,注意这用到了额外的存储空间,如果试着翻转一个整型数,则会遇到翻转后可能溢出的问题。笔者使用判断高位和低位是否相等的方法,只需要定义一个计数变量即可实现,没有占用额外的存储空间。另外尽量使用for循环代替while循环,因为运行时间相对短一些。

代码

Python

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if (x < 0) | (x == 0x7FFFFFFF):
            return False
        i = 1
        temp = x/10
        while(temp > 0):
            temp /= 10
            i += 1
        #知道数有多少位后,循环判断最高位是否等于最低位
        for i in range(i-1,0,-2):
            base = pow(10,i)
            if(x/base == x%10):
                x = (x%base)/10
                continue
            else:
                return False
        return True

Java

public class Solution {
    public boolean isPalindrome(int x) {
        int i,base;
		if(x < 0 || x == 0x7FFFFFFF) return false;
        //先看看数有多少位;
		for(i = 1;x/(int)Math.pow(10, i) > 0;i++);
		
		for(i--;i>0;i -= 2){
		    base = (int)Math.pow(10, i);
			if(x/base == x%10){
				//最高位跟最高位相等,则去掉最高位和最低位并进行下次循环;
				x = (x%base)/10;
				continue;
			}
			else return false;
		}
		return true;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值