leetcode 第九题 Palindrome Number

        一看到这个题的难度是:Easy,我在想这次我终于可以不用参考相关的代码了吧,事实证明这个题是我自己想出来的哈哈哈哈哈哈~刚开始下手的时候首先想到的是将数字转换成字符串然后通过栈的方式解决,后来就得它麻烦,想起来之前做过一个类似的题,就是反转数字,如果一个数是回文数,那么数字本身和反转的数字应该是一样的,我的思路就是基于这个。当然,后来我才知道为什么没人用将数字转换成字符串,因为题目要求不使用额外空间,一般来说不使用额外空间的意思是不使用复杂度为O(n)的额外空间,新建一些字符串、整型值之类的还是可以的。需要注意的是,如果输入的是负数,直接返回false。下面就是我的代码啦!

class Solution {
public:
    bool isPalindrome(int x) {
        long long y = 0;
        int origin = x; //这句话特别的重要,因为最后要比较的是原始数据,而while循环中已经将x的值改变了
        
        if(x<0)
            return false;
        
        while(x){
            int n = x % 10;
            y = y*10 + n;
            x = x / 10;
        }
        
        if(y > INT_MAX || y < INT_MIN){
            return false;
        }
        
        if(y == origin)
            return true;
        else
            return false;
    }
};
        后来在网上发现一种更加巧妙的方法,巧用“/”和“%”符号,厉害!

class Solution{
public:
    bool isPalindrome(int x){
		if(x < 0)
			return false;
		int div = 1;
		while(x / div >= 10){
			div *= 10;
		}
		while(x != 0){
			int l = x/div;
			int r = x%10;
			if(l != r)
				return false;
			x = (x % div) / 10;
			div /= 100;
		}
		return true;
	}
};
        这个方法我不得不服啊!!学习了!!

        忽然觉得完成一件事情,最难的部分也许不是这件事情本身的难度,而是开头难,事情本身的难度决定了完成之后本人的成就感的大小,所以俗话说“万事开头难”嘛。就像我想要改变我自己一样,有时候逼一下自己还是必要的。开始了也就不怕困难了!!

        Fighting!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值