1、题目如下:
2、个人Python代码实现
个人代码思路,主要是新建一个列表stack,将原列表asteroids中的元素依次加入到stack中。以上代码可能会有两部分比较冗余的部分,一是两个标志位可以不用单独声明,二是当stack列表中的最后一个元素为负数的时候,无论asteroids中的下一个元素是正数还是负数,都是直接加入到stack中。
个人代码如下:
class Solution:
def asteroidCollision(self, asteroids: List[int]) -> List[int]:
stack = [] #声明一个空列表用于输出结果
flag1 = 1 #标志位1,用于判断stack最后一个元素是否为正数
flag2 = 1 #标志位2,用于判断asteroids第一个元素是否为正数
i = 0 #下标,用于表示asteroids列表的第一个元素下标
while len(asteroids) > 0: #当asteroids不为空时,循环继续
if not stack: #当stack不为空的时候,flag1为2
flag1 = 2
elif stack[-1] > 0: #当stack最后一个元素为正数的时候,flag1为1
flag1 = 1
else: #当stack最后一个元素为负数的时候,flag1为0
flag1 = 0
if asteroids[i] == 0: #当asteroids第一个元素为0时,flag2为2
flag2 = 2
elif asteroids[i] > 0: #当asteroids第一个元素为正数的时候,flag2为1
flag2 = 1
else: #当asteroids第一个元素为负数的时候,flag2为0
flag2 = 0
if flag1 == 2: #当stack为空时,将asteroids第一个元素加入stack,并在asteroids中删除该元素
stack.append(asteroids[i])
del asteroids[i]
elif flag1 == 1: #当stack最后一个元素为正数时
if flag2 == 2: #当asteroids第一个元素为0时,在asteroids中删除该元素
del asteroids[i]
elif flag2 == 1: #当asteroids第一个元素为正数时,将钙元素假如stack,并在asteroids中删除该元素
stack.append(asteroids[i])
del asteroids[i]
elif flag2 == 0: #当asteroids第一个元素为负数时
if stack[-1] + asteroids[i] > 0: #如果stack最后一个元素和asteroids第一个元素相加为正数,在asteroids中删除第一个元素
del asteroids[i]
elif stack[-1] + asteroids[i] == 0: #如果stack最后一个元素和asteroids第一个元素相加为0,删除这两个元素
del asteroids[i]
stack.pop()
else: #如果stack最后一个元素和asteroids第一个元素相加为负数,删除stack最后一个元素
stack.pop()
elif flag1 == 0: #当stack最后一个元素为负数时,asteroids中的元素直接加入stack中,并唉asteroids中删除他
if flag2 == 2:
del asteroids[i]
elif flag2 == 1:
stack.append(asteroids[i])
del asteroids[i]
elif flag2 == 0:
stack.append(asteroids[i])
del asteroids[i]
return stack
3、题解Python代码如下:
题解代码简洁很多,需要稍微调试才能理解,但是个人很难单独写出来,仅作为对比,表示个人代码长度。
题解代码如下:
asteroids = [5, 10, -15, 6]
st = []
for aster in asteroids:
alive = True #每个asteroids列表中的元素初始化标志位都为True
#当且仅当标志位为True,当前元素asteroid为负数,st列表不为空且st最后一个元素为正数时,进入循环
while alive and aster < 0 and st and st[-1] > 0:
#当asteroid为负数且绝对值小于st最后一个元素时(即两数之和也为负数),标志位为True,否则为False
alive = st[-1] < -aster
#当两数之和为负数时,移除st最后一个元素
if st[-1] <= -aster:
st.pop()
if alive:
st.append(aster)
print(st)