祁彧w博客

  • 🏠首页
  • 📔文章分类
    • 🖥️互联网技术
    • 🧮算法
    • 🤖人工智能
    • 📃论文学习
    • 📸生活分享
  • 💬关于
人生若只如初见
  1. 首页
  2. 算法
  3. 正文

【每日一题】Leetcode 1706. 球会落何处

2025-02-15 276点热度 0人点赞 0条评论

【每日一题】Leetcode 1706. 球会落何处

——跳转原题

中等

数组

矩阵

模拟

用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。

箱子中的每个单元格都有一个对角线挡板,跨过单元格的两个角,可以将球导向左侧或者右侧。

  • 将球导向右侧的挡板跨过左上角和右下角,在网格中用 1 表示。
  • 将球导向左侧的挡板跨过右上角和左下角,在网格中用 -1 表示。

在箱子每一列的顶端各放一颗球。每颗球都可能卡在箱子里或从底部掉出来。如果球恰好卡在两块挡板之间的 "V" 形图案,或者被一块挡导向到箱子的任意一侧边上,就会卡住。

返回一个大小为 n 的数组 answer ,其中 answer[i] 是球放在顶部的第 i 列后从底部掉出来的那一列对应的下标,如果球卡在盒子里,则返回 -1 。

示例 1:

fig1

输入:grid = [[1,1,1,-1,-1],[1,1,1,-1,-1],[-1,-1,-1,1,1],[1,1,1,1,-1],[-1,-1,-1,-1,-1]]
输出:[1,-1,-1,-1,-1]
解释:示例如图:
b0 球开始放在第 0 列上,最终从箱子底部第 1 列掉出。
b1 球开始放在第 1 列上,会卡在第 2、3 列和第 1 行之间的 "V" 形里。
b2 球开始放在第 2 列上,会卡在第 2、3 列和第 0 行之间的 "V" 形里。
b3 球开始放在第 3 列上,会卡在第 2、3 列和第 0 行之间的 "V" 形里。
b4 球开始放在第 4 列上,会卡在第 2、3 列和第 1 行之间的 "V" 形里。

示例 2:

输入:grid = [[-1]]
输出:[-1]
解释:球被卡在箱子左侧边上。

示例 3:

输入:grid = [[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1],[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1]]
输出:[0,1,2,3,4,-1]

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 100
grid[i][j] 为 1 或 -1

思路:

  1. 依次让每个小球下落,即循环判断每个小球;
  2. 每行小球存在两个情况,分别是“下落”或“卡住”。
  3. 设当前位置为当前行的cur_pos,若cur_pos位置为1,即向右滑落;若cur_pos位置为-1,即向左滑落。
  4. 滑落是否成功:Ⅰ. 向右滑落,判断右侧状态 ① 值为边界或者-1 ,② 值为1;Ⅱ. 向左滑落,判断左侧状态 ① 值为边界或者1, ② 值为2;
  5. 根据思路4,当状态为②时,当前行小球可以滑落至 ① 当前行cur_pos为 1 则 cur_pos + 1(向右滑落到下一行,位置右移);② 当前行cur_pos为 -1 则 cur_pos - 1(向左滑落到下一行,位置左移)

代码:

class Solution:
    def findBall(self, grid: List[List[int]]) -> List[int]:        
        def check(ball):
        """
            param ball: 小球初始位置
            return : 小球到达最后一行的位置 或 卡住返回-1
        """
            cur_pos = ball
            for row in grid:
                if row[cur_pos] == 1:
                    if cur_pos + 1 >= len(row) or row[cur_pos + 1] == -1:
                        return -1
                    else:
                        cur_pos += 1
                else: # row[cur_pos] == -1:
                    if cur_pos - 1 < 0 or row[cur_pos - 1] == 1:
                        return -1
                    else:
                        cur_pos -= 1
            return cur_pos

        ballNum = len(grid[0])
        ans = []
        for ball in range(ballNum):
            ans.append(check(ball))    
        return ans

感谢浏览,欢迎关注祁彧w博客!

标签: 模拟
最后更新:2025-02-15

祁彧w

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 随机
最新 热点 随机
使用ZeroTier进行内网穿透异地组网并搭建moon中转服务器 【每日一题】Leetcode 2595. 奇偶位数 【每日一题】Leetcode 624. 数组列表中的最大距离 【每日一题】Leetcode 2080. 区间内查询数字的频率 【每日一题】Leetcode 1287. 有序数组中出现次数超过25%的元素 【每日一题】Leetcode 1299. 将每个元素替换为右侧最大元素
Interpreting Black‑Box Models: A Review on Explainable Artificial Intelligenc TIFA: Accurate and Interpretable Text-to-Image Faithfulness Evaluation with Question Answering 【每日一题】Leetcode 1287. 有序数组中出现次数超过25%的元素 使用ZeroTier进行内网穿透异地组网并搭建moon中转服务器 【每日一题】Leetcode 1552. 两球之间的磁力 【每日一题】Leetcode 1299. 将每个元素替换为右侧最大元素
标签聚合
数据分析 内网穿透 二分查找 zerotier python sklearn 可解释性 机器学习
最近评论
祁彧w 发布于 1 年前(07月11日) 评论测试

COPYRIGHT © 2024 祁彧w. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang