Leetcode算法——1706、球会落何处

"本文解析了LeetCode题目1706,介绍了球会落何处的Python3解法,分别展示了forelse和ifelse两种思路。重点讲解了如何处理边界条件和判断小球最终位置。理解小球移动规则并掌握循环结构在解决此类问题中的应用。"
摘要由CSDN通过智能技术生成

Leetcode算法——1706、球会落何处

题目

题目链接

思路

小模拟
最终的位置只需要考虑列坐标,右挡板会使小球列坐标+1,左挡板会使小球列坐标-1。列坐标为0代表小球现在位于第零列上,所列坐标小于0或超出最大范围说明小球被挡住。
小球终止即最后输出值为-1的情况有三种

  1. 碰到左边墙,列坐标小于零
  2. 碰到右边墙,列坐标大于列数-1
  3. 碰到v字形,当前的挡板方向,与小球滑下后的挡板方向不同

其他的情况小球都会继续下滑

关于代码中为啥使用for\else而不是if\else
for\else如果代码没有在for循环内break,则最后运行else语句,因为我们需要计算最后小球落下的位置,所以需要小球能够落到最低部,即不会被break掉。
第二,将else移到里面if下对于能够落到最低部的小球来说逻辑没有任何问题,但对于落不到底部的小球,则会让小球位置记录为先前能够下到最后一个位置的列坐标,结果就不是-1了,如果使用if\else的话需要将代码改为

if col < 0 or col > n - 1 or row[col] != dir: 
	ans[j] = -1
    break
else:
	ans[j] = col

Python3解法(for\else)

def findBall(self, grid: List[List[int]]) -> List[int]:
    n = len(grid[0])
    result = [-1] * n
    for j in range(n):
        position = j
        for row in grid:
            dir = row[position]
            position += dir
            # 若碰到左边墙,右边墙,v字形
            if position < 0 or position > n - 1 or row[position] != dir:
                break
        else:
            result[j] = position
    return result

Python3解法(if\else)

def findBall(self, grid: List[List[int]]) -> List[int]:
    n = len(grid[0])
    result = [-1] * n
    for j in range(n):
        position = j
        for row in grid:
            dir = row[position]
            position += dir
            # 若碰到左边墙,右边墙,v字形
            if col < 0 or col > n - 1 or row[col] != dir: 
				ans[j] = -1
    			break
			else:
				ans[j] = col
    return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值