leetcode(简单):整数反转

开始刷leetcode,第一天。

为了练习C语言和python语言的编程能力,以及锻炼算法思想,故而决心开始我的刷题之旅。

今天的题是整数的反转,题目要求如下:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

好了题目看完了,但是没有太多的思路,后面参照网上各位大佬的代码,发现这玩意儿就是一个数学题啊。

C语言:

int reverse(int x)
{
    long long out = 0;
    while(x)
    {
      /*题目的解答中的意思是通过事先的判断,来判决输出out是否溢出,但是实际上对out在定义的时候可        
        以将out的类型定义为long long类型的,便可以解决溢出的问题 
        int pop=0;
        pop=x%10;
        if(out >INT_MAX/10 ||(out <INT_MAX/10&&pop>7)  )
           return 0;
         if(out <INT_MIN/10 ||(out <INT_MIN/10&&pop<-8)  )
            return 0;
        */
        int temp = out*10 + x%10;
        if(temp/10 != out)       
        {
            return 0;
        }
        x = x/10;
        out = temp;  
 
    }

    return out;
}

本来是想通过if语句来判断,但是事实上执行结果要么超时,要么错误。但是事先将out定义为long long类型这个问题,便是解决了。具体的算法实现,最好用笔自己手推一遍。

执行的结果:

执行用时 : 8 ms, 在Reverse Integer的C提交中击败了100.00% 的用户

内存消耗 : 6.5 MB, 在Reverse Integer的C提交中击败了0.98% 的用户

内存偏高了!

 python语言实现:

因为自己初学python,所以不得不查很多的资料后注释。

有两个解题思路:

思路一:

将整数先转为字符串格式。再倒序对字符串进行读取。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        # if x<-2^31 or x>2^31-1:
        #     return 0
        count = 0
        #str()将x字符串化
        s = str(x)
        #若是有第一个字符为负号“-”
        if s[0]=='-':
        #for循环,i是从len(s)-1里面挨着读起走
            for i in range(len(s)-1):
                count = count*10+int(s[-1-i])#python的特性,字符串可以从右向左读
            if count>2**31:
                return 0
            return -count
        else:
            for i in range(len(s)):
                count = count*10+int(s[-i-1])
            if count>2**31-1:
                return 0
            return count

其结果:

执行用时 : 60 ms, 在Reverse Integer的Python3提交中击败了99.61% 的用户

内存消耗 : 13.2 MB, 在Reverse Integer的Python3提交中击败了0.97% 的用户

 

思路二:

将C语言直接转为python,思想不变 

#这个比第一个方法,python的特性运用的没那么强烈
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        number = 0
        a = abs(x)
        while a!=0:
            num = a%10
            a = int(a/10)
            number = number*10 + num
            if number > 2**31-1:
                return 0
        if x<0:
            number = -number
        return number

执行用时 : 100 ms, 在Reverse Integer的Python3提交中击败了7.78% 的用户

内存消耗 : 13.1 MB, 在Reverse Integer的Python3提交中击败了0.97% 的用户

这种方法耗时,耗空间,不推荐!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值