前言
算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!
第一遍,不求最优解,但求能过!!!
📢 这是我刷第 2/100 道力扣简单题
一、题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
难度:简单
二、题目解析
数字翻转,意思就是,给你一个 152 返回 251,给-321,返回-123
我想到的是,先转为字符串
然后判断第一个元素是否为-
然后去掉负号,再倒序
反转后转为整数,判断大小
根据数学方法来看,怎么将这个整数翻转
首先我们需要知道,把一个整数拆开,需要些什么操作
先除以是,然后取余数,余数就是整数的个位数,然后再把整数减去个位数,再除以十
然后接着上面的操作,直到取余数为 0
大致流程:123,取 10 的余数,3,减去 3 为 120,除以十为 12
取 10 的余数,2,减三除以十,1
取 10 的余数,1,减 1 除以十,0
取 10 的余数,0,结束循环
找列表接收个位数的值,然后遍历列表,将其相加
三、代码
第一种方法的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/7/24 18:06
# @Version: 1.0
class Solution:
def reverse(self, x: int) -> int:
"""
转为字符串翻转
:param x: 被翻转的数
:return: 翻转完成的数
"""
if x < 0:
x = -x
s = str(x)[::-1]
ends = -1 * int(s)
elif x > 0:
ends = int(str(x)[::-1])
else:
ends = 0
if -2 ** 31 <= ends <= 2 ** 31 - 1:
return ends
else:
return 0
复制代码
第二种方法的的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/7/24 18:09
# @Version: 1.0
class Solution:
def reverse(self, x: int) -> int:
"""
取余从后一个一个拿数
:param x: 被翻转的数
:return: 翻转完成的数
"""
i = 0
if x < 0:
x = -x
xsum = 0
n = len(str(x))
while i < n:
xsum += (x % 10) * 10 ** (n - 1)
x = (x - (x % 10)) / 10
n -= 1
if -2 ** 31 <= xsum <= 2 ** 31 - 1:
return int(xsum) * -1
else:
return 0
elif x > 0:
xsum = 0
n = len(str(x))
while i < n:
xsum += (x % 10) * 10 ** (n - 1)
x = (x - (x % 10)) / 10
n -= 1
if -2 ** 31 <= xsum <= 2 ** 31 - 1:
return int(xsum)
else:
return 0
else:
return 0
复制代码
结语
坚持最重要,每日一题必不可少!
评论