自己想的 效率有点低 可能是因为递归了下自己= =。。
func asteroidCollision(_ asteroids: [Int]) -> [Int] {
var stack = Array<Int>()
let len = asteroids.count
for i in 0..<len {
let num = asteroids[i]
if stack.isEmpty {
//空的话 先入栈
stack.append(num)
} else {
let num1 = stack.popLast() ?? 0
//前一个小于0 那么后一个大于零或者小于零都不会发生碰撞 可以直接放进去
if num1 < 0 {
stack.append(num1)
stack.append(num)
}
//说明前一个是正数 那么后边一个是正数的话方向相同 后一个如果是负数的话 会发生碰撞
else{
if num > 0 {
stack.append(num1)
stack.append(num)
}
//发生碰撞
else {
if num1 + num > 0 {
stack.append(num1)
}
else if num1 + num < 0{
stack.append(num)
stack = asteroidCollision(stack)
}
}
}
}
}
return stack
}
网友评论