剑指 Offer II 037. 小行星碰撞

2022-06-10  本文已影响0人  邦_

自己想的 效率有点低 可能是因为递归了下自己= =。。

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
    
    }








上一篇 下一篇

猜你喜欢

热点阅读