文章目录

  • 本题分析
  • 题目链接

本题分析

题意重述:

给定一个二维的格子图纸,二维图纸上每个格子都有一个挡板,挡板方向只能是对角线方向。每一列上方都有1个小球,对于给定的二维图纸,求出每一列的小球是能够滑出来,还是卡在里面。如果能滑出来,求出从哪一列滑出来,若卡住,返回-1.

题目思路:

每个格子被隔板分成2个区域,上面记为0,下面记为1.使用变量flag来表示。

用x和y表示坐标,注意考虑边界。

从图中可以看出:
如果小球位于1个格子的下方,那么它必然会滑到它下方的格子。

如果小球位于1个格子的上方,就要分情况讨论。

  1. 首先如果位于左上-右下对角线的格子
    就要看右边格子对角线情况,如果右边走到边界或者右侧格子是右上-左下对角线,则小球卡住,记为-1.比如图中b2就是这种情况
    如果右边也是左上-右下对角线,则小球顺利滑落到右侧格子的下方区域。下图b0就是这种情况。
  2. 如果位于右上-左下对角线的格子,类似分析

上面的分类讨论就是代码的实现逻辑,即采用模拟法解此题。

时间复杂度O(m×n)O(m\times n)O(m×n)

ac代码

class Solution {public:vector<int> findBall(vector<vector<int>>& grid) {int m=grid.size(),n=grid[0].size();vector<int> res;for(int i=0;i<n;i++){int x=0,y=i,flag=0;//flag=0表示小球在第一行的上半部分while(x<m){ //对于每一列的小球让它走到底,所以用while循环if(flag==0){//小球位于一个格子的上半部分if(grid[x][y]==1){//if(y+1>= n ||grid[x][y+1]==-1) y=-1;else y++,flag=1;    }else{if(y-1< 0 || grid[x][y-1]==1) y=-1;else y--,flag=1;    }}else{//小球位于一个格子的下半部分x++,flag=0;}if(y==-1) break;}res.push_back(y);}return res;}
};

题目链接

Leetcode1706. 球会落何处

Leetcode1706. 球会落何处[C++题解]:模拟相关推荐

  1. 1706. 球会落何处 / 680. 验证回文字符串 Ⅱ

    1706. 球会落何处[中等题][每日一题] 思路: 单看每一行,必须是小球所在的列跟它左右两侧至少有一侧的挡板方向相同才能使小球滚动下去,否则就卡住了,具体点说就是,设小球当前所在列下标为i,那么如 ...

  2. LeetCode 1706. 球会落何处(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 用一个大小为 m x n 的二维网格 grid 表示一个箱子. 你有 n 颗球.箱子的顶部和底部都是开着的. 箱子中的每个单元格都有一个对角线挡板,跨过单 ...

  3. leetcode算法题--球会落何处

    原题链接:https://leetcode-cn.com/problems/where-will-the-ball-fall/ class Solution {public:vector<int ...

  4. PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 题意:将1~N压栈,判断给定序列是否是合法的出栈序列. 对于序列1~N中的每个值i,先将其压入栈.然后对于它就有两种处理方法:要么压 ...

  5. PAT甲级1069 The Black Hole of Numbers:[C++题解]模拟、6174

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 注意特判 6174这个数:if(n == 6174) printf("7641 - 1467 = 6174\n" ...

  6. PAT甲级1056 Mice and Rice:[C++题解]模拟、排名

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 本题采用vector存每只老鼠,为什么用vector,因为每过一轮剩余老鼠数量是动态变化的. 每组中未选出的选手排名相同,排名等于进 ...

  7. PAT甲级1042 Shuffling Machine:[C++题解]模拟、哈希表、洗牌机

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:序列置换. 这里用到函数memcpy()用于数组复制,用法memcpy(dest, src, sizeof dest); 把src数组 ...

  8. PAT甲级1041 Be Unique :[C++题解]模拟、哈希表

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:统计次数,按序遍历,输出第一个出现次数为1的号码. ac代码 #include<bits/stdc++.h> using ...

  9. PAT甲级1031 Hello World for U:[C++题解]模拟、数学运算

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:n=n1+n2+n3−2,且n1=n3,n = n_1 +n_2 +n_3-2,且n_1=n_3,n=n1​+n2​+n3​−2,且n ...

最新文章

  1. 基本的try-cathc-finally异常处理
  2. MySql之DDL操作创建表(添加主键, 外键约束以及基本的数据类型)
  3. C#鼠标控制控件移动的示例
  4. oracle取得序列当前值(不改变当前序列值)
  5. prometheus接入mysqld_exporter
  6. python爬取素材图片代码_基于Python爬取素材网站音频文件
  7. JavaScript性能优化【下】--性能优化的具体方式
  8. Entity Framework 学习中级篇2—存储过程(上)(转)
  9. C++实现类似反射模式
  10. 新手小白python数据清洗代码_5天10分钟,学会数据清洗!(Python)
  11. 22年PMP考试【全真敏捷试题】
  12. 使用svn merge 实现回退版本
  13. 7K字面经 | 百度金融、蚂蚁金服、易贷网、金蛋科技等互联网金融公司面试经验...
  14. 崩坏3区号+86_中国大陆国际区号是“ +86”,还是“ +086”、“ +0086”
  15. Fingerprint HAL
  16. java instrument_JAVA Instrument技术实战以及在QTrace中的应用
  17. php修改浏览器地址,PHPstorm设置浏览器打开代码
  18. 8086 CPU 内部结构
  19. 如何在体育场创造极致观看体验
  20. 人机交互基础教程-复习总结

热门文章

  1. JMS - QueueBrowser
  2. SQL2005的库能不转成SQL2000的?
  3. card2phone android,Installing application on SD-card in Android sdk 2.2
  4. python str输出到txt_Python 速学!不懂怎么入门python的小白看这篇就够了!
  5. Part1. 泛函分析讲义I-度量空间概述
  6. 2.9 情感分类-深度学习第五课《序列模型》-Stanford吴恩达教授
  7. Scan Chain的原理与实现(实践)-top down flow
  8. 【DIY】可能是最简单便宜的DIY温湿度计,arduino温湿度计
  9. 三 虚拟机安装Deepin
  10. Python 学习笔记(3)对txt文件的读与写操作(下)