一力扣7整数反转
1思路
可以反转的时候把他转化成字符串,记录正负号并变成整数,再反转,从第一个非0字符串开始切片,最后加上正负号用int强制转化
复杂度On
二代码
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
s=str(x)
k=1
if s[0]=='-':
k=-1
s=s[1:]
#实现对正负号的记录
l=len(s)
s=s[::-1]
#反转字符串
for i in range(l):
if s[i]!='0':
s=s[i:]
break
#遇到第一个非零字符就跳出循环
res=k*int(s)
if res<-(2**31) or res>2**31-1:
return 0
#排除异样
else:
return res
3结果
二力扣8
1思路
标识符控制
- 我们用neg代表正负号来最后乘以结果
- 我们用ch控制多个正负号连续出现或多次出现无效的情况
- 我们用ans表示录入的纯数字,他的是否空集可以作为是否允许录入的标志
条件分类
- 再无录入且标识符唯一或没有的情况下跳过空格
- 在初始值为0开头情况下,ans为空时调整标识符并继续
- 录入正负号时改变neg标志量
- 第二次次标志出现就结束循环
- 范围判断数字和判断溢出
2代码
class Solution:
def myAtoi(self, s: str) -> int:
ans=0
neg=1
ch=1
for i in range(len(s)):
if s[i]==' ' and ch and ans==0:#再无录入且标识符唯一或没有的情况下跳过空格
continue
if s[i]=='0' and ans==0:#在初始值为0开头情况下,ans为空时调整标识符并继续
ch=0
continue
if s[i]=='-' and ans==0 and ch:#录入正负号时改变neg标志量
neg=-1
ch=0
continue
if s[i]=='-' and (ans!=0 or not ch):#第二次次标志出现就结束循环
break
if s[i]=='+' and ans==0 and ch:
ch=0
continue
if s[i]=='+' and (ans!=0 or not ch):
break
if s[i]<='9' and s[i]>='0':#范围判断数字
ans=ans*10+int(s[i])
else:
break
ans=ans*neg
if ans>2**31-1:
return 2**31-1
if ans<-2**31:#检验溢出
return -2**31
return ans
3结果
三题库9
1思路
- 这个题对python来说没有什么大的意义,明明最简单的倒着排最有效,第一种两行转化字符串和倒排
- 第二种方法就是首位取余与最后一个对应,排除异样情况,如果i取完有不等就false
2代码
class Solution:
def isPalindrome(self, x: int) -> bool:
s=str(x)
return s==s[::-1]
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0 :
return False
i, res = x, 0
while i != 0:
res = res * 10 + i % 10
i //= 10
return res == x
总结:
今天可以说没看题解之前写的,有些生涩,但是觉得今天字符串啊数字啊一直倒转一直反转,无非就【::-1】或者加点条件判断,比昨天的容易不少