• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

nunca

但行好事 莫问前程
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

LeetCode 第七题:Reverse Integer

一、题目

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output:  321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

二、解题思路

首先我想到的是字符串的反转问题,利用栈进行,先把给定的整数转换成字符串,然后把元素压入栈,再一个个出栈,但是这样没法处理负数,比如:输入 -123,希望输出是 -321,我却输出了 321-,所以第一步得先做一个判断,看是否负数,负数的话,初始字符串应该是 ‘ - ’,而不是空字符串,这样看似解决了符号问题,但是在某些情况下,会溢出,比如给定的x为 :-2147483638,明显没有溢出,但是经过我的转化成 8363847412,就明显溢出了,所以得加判断,这是一处判断,还有一处是输出的时候需要加判断整数是否溢出。提交之后看到 AC,十分开心,但是看到别人的答案,瞬间崩溃了,别人用python的切片功能几行代码就解决了,我居然写了好多行,下附我的代码和别人的代码:

先附上别人简洁的代码:

def reverse1(self,x):
    if x < 0:
        y = -1*int(str(-x)[::-1])
    else:
        y = int(str(x)[::-1])
    if y > 2147483647 or y<-2147483648:
        y = 0
    print(y)
    return y

 

下面是我用栈实现的代码:

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x<0:
            outstr = '-'
            zx = -x
            if zx > 2147483647:
                return 0
            strx = str(zx)
        else:
            outstr = ' '
            strx = str(x)
        s = Stack()
        for item in strx:
            s.push(item)
        while not s.is_empty():
            outstr += s.pop()
        y = int(outstr)
        if -2147483648 <= y < 2147483647:
            return y
        else:
            return 0
       
class Stack(object):
    def __init__(self):
        self._elems = []
    def push(self,elem):
        self._elems.append(elem)
    def pop(self):
        return self._elems.pop()
    def is_empty(self):
        return self._elems == []
View Code

下面记录一下python中的切片操作

if __name__ == '__main__':
    '''
    切片的对象是字符串,列表,元组对象,形式为 obj[start:end:step]
    切片的时候,开始的元素包括在结果之中,而结束的元素不包括在结果中,如下面的kf2输出为56,其计算过程是
    首先从k的第4个元素开始,即从5开始切,以步长为1开始直至找到k的第6个位置即7为止,但是不能包含7,所以就只输出56
    '''
    k = "123456789"
    "字符串反转"
    fk1 = k[::-1]
    fk2 = k[4:6:1]
    fk3 = k[8:3:-2]
    print(fk3)

  

既然无论如何时间都会过去,为什么不选择做些有意义的事情呢

posted on 2018-03-16 09:01  乐晓东随笔  阅读(272)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3