公交站间问题
本题我觉得会没注意的点就在于判断start和destination的大小问题,因为我使用的是range()函数,假设我的len(distance)=7,start=7,destination=2,若没有进行大小比较,则循环会自动暂停,所以需要多一步判断。所以我这个方法比较笨,算是暴力遍历了。
class Solution(object):
def distanceBetweenBusStops(self, distance, start, destination):
"""
:type distance: List[int]
:type start: int
:type destination: int
:rtype: int
"""
length=len(distance)
sum0=sum1=sum2=0
for i in range(0,length):
sum2=sum2+distance[i]
if start>destination:
start,destination=destination,start//进行终起点对换
for j in range(start,destination):
sum0=sum0+distance[j]
sum1=sum2-sum0
if sum0<sum1:
return sum0
else:
return sum1
两数之和
①我的想法就是把 利用两层循环求出和,不能重复出现的题设用pop即可,但是总体的运行效率和所占内存较高。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
num=len(nums)
for i in range(0,num-1):
for j in range(i+1,num):
sum0=nums[i]+nums[j]
if sum0==target:
nums.pop(i)
return [i,j]
②参考学习了一下别人的题解,用字典来做。enumerate函数为遍历函数,以下的方法就少了一层循环,而且少了每一次循环所需进行的判定。更加简洁明了。
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
hashmap = {}
for index, num in enumerate(nums):
another_num = target - num//num+?=target
if another_num in hashmap:
return [hashmap[another_num], index]//返回another_num在字典中的位置,index是其索引值
hashmap[num] = index//进行下一个循环的跳转
return None
分数加减运算
我的想法就是先将分子,分母,以及其中的加减号都先分离出来,之后进行将分母扩大到7560(其为1-9共同可乘到的数字),再将分子扩大到相应的倍数。接下来就是进行分子的加减之和(因为分母均为7560,不用管它),但是我的程序问题就出在无法很好地将分子与其对应的符号结合起来,导致计算结果一直有问题,我估计是循环上哪出了问题,现在也无法解决。有没有大神能帮帮我5555。最后就是找分子分母的最大公约数(我用的是辗转相除法),最终得到题目所需要的答案格式。我觉得难点有在于他的加减符号位置不定性,很困扰我。
class Solution(object):
def fractionAddition(self, expression):
"""
:type expression: str
:rtype: str
"""
#提出所有的加减符号
list1=[]
for i in expression:
if ord(i)==45 or ord(i)==43:
list1.append(i)
#asc=[ord(x) for x in list1]#转为asc码
jianlist=expression.split("+")
jianstr=' '.join(jianlist)
#分离出分子分母
jianlist0=jianstr.split("/")
jianstr0=' '.join(jianlist0)
jianlist1=jianstr0.split("+")
jianstr1=' '.join(jianlist1)
jianlist2=jianstr1.split("-")
jianstr2=' '.join(jianlist2)
jianlist3=jianstr2.split(" ")
jianstr3=''.join(jianlist3)
fenmu=jianstr3[1::2]
#求出最大公约数
summ=1
sumz=1
fenzi=jianstr3[::2]
fenzi1=[]
fenmu1=[]
for i in range(0,len(fenmu)):
summ=summ*int(fenmu[i])
#分子分母分别乘以达到最大公约数
count=0
yue=0
list0=[]
for i in jianstr3:
if count%2!=0:
yue=7560//int(i)#7560应为1-10的最小公约数
i=int(i)*yue
list0.append(i)
count+=1
else:
i=int(i)*yue
list0.append(i)
count=+1
sum0=0
for x in range(0,len(list1)):
for y in range(0,len(list0),2):
if len(list1)==1:#只有两位数加减,且减号不在第一位
if ord(list1[x])==45:
sum0=list0[2]-list0[0]
else:
sum0=list0[2]+list0[0]
else:
if ord(list1[x])==45:
sum0=sum0-list0[y]
if ord(list1[x])==43:
sum0=sum0+list0[y]
m=7560
n=abs(sum0)
if n!=0:
r = m % abs(sum0) #求最大公约数
while r != 0:
m = n
n = r
r = m % n#n为最大公约数
return(sum0//n,'/',m//n)
else:
return('0/1')
要是大家有更好的解法,也欢迎在评论区跟我沟通交流呀!