C++:LeetCode 在不使用额外的内存空间的条件下判断一个整数是否是回文。

题目:
在不使用额外的内存空间的条件下判断一个整数是否是回文。
提示:
负整数可以是回文吗?(比如-1)
如果你在考虑将数字转化为字符串的话,请注意一下不能使用额外空间的限制你可以将整数翻转。但是,如果你做过题目“Reverse Integer”,你会知道将整数翻转可能会出现溢出的情况,你怎么处理这个问题?这道题有更具普遍性的解法。
什么是回文?
例如:1221、12321等。负数不是回文,能被10整除的肯定也不是回文(除0以外)。
什么是不使用额外空间?
在网上查了一些资料:一般都是指空间复杂度为O(1)。无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1)。(这是个人理解,如果大佬恰巧路过此地,认为此处理解不当,请您留下您的高见,谢谢哦)
代码如下,详细解释已经在代码中标注

class Solution {
public:
    /**
     * 
     * @param x int整型 
     * @return bool布尔型
     */
    bool isPalindrome(int x) {
        // write code here
    //查了一些资料:不使用额外空间的意思一般指空间复杂度为O(1)
    //空间复杂度为O(1),相当于未使用额外空间
    //我认为这个方法比下边的好很多,下边那个纯属好奇会不会成功
    int temp = 0;
	if (x < 0 || x != 0 && x % 10 == 0)
		return false;
	while (x > temp)
	{
		temp = temp * 10 + x % 10;
		x = x / 10;
	}
	//当x是奇数时,最中间的数会在最后一次循环中给temp,所以temp/10去掉最后一个数,
    //最后temp的值是数字的后半部分
	//最后x的值是数字的前半部分
	return temp == x || temp / 10 == x;
    /*
        if (x < 0 || x != 0 && x % 10 == 0)
		    return false;
        string str = to_string(x);
        //我还尝试了注释掉的这种方式
        //可是通过率只有25%,错误原因是:有溢出
        //reverse(to_string(x).begin(), to_string(x).end());
        //return str == to_string(x);
        //我就定义了第二个变量,通过了,此时空间复杂度也为O(1)
	    string temp = str;
	    reverse(temp.begin(),temp.end());
	    return temp == str;
	    */
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值