文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个 m x n 的字符矩阵 box ,它表示一个箱子的侧视图。箱子的每一个格子可能为:

  • '#' 表示石头
  • '*' 表示固定的障碍物
  • '.' 表示空位置
    这个箱子被 顺时针旋转 90 度 ,由于重力原因,部分石头的位置会发生改变。
    每个石头会垂直掉落,直到它遇到障碍物,另一个石头或者箱子的底部。
    重力 不会 影响障碍物的位置,同时箱子旋转不会产生惯性 ,也就是说石头的水平位置不会发生改变。

题目保证初始时 box 中的石头要么在一个障碍物上,要么在另一个石头上,要么在箱子的底部。

请你返回一个 n x m 的矩阵,表示按照上述旋转后,箱子内的结果。

示例 1:

输入:box = [["#",".","#"]]
输出:[["."],["#"],["#"]]

示例 2:

输入:box = [["#",".","*","."],["#","#","*","."]]
输出:[["#","."],["#","#"],["*","*"],[".","."]]

示例 3:

输入:box = [["#","#","*",".","*","."],["#","#","#","*",".","."],["#","#","#",".","#","."]]
输出:[[".","#","#"],[".","#","#"],["#","#","*"],["#","*","."],["#",".","*"],["#",".","."]]提示:
m == box.length
n == box[i].length
1 <= m, n <= 500
box[i][j] 只可能是 '#' ,'*' 或者 '.' 。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotating-the-box
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 建立每行的前缀和,从底部开始检查
class Solution {public:vector<vector<char>> rotateTheBox(vector<vector<char>>& box) {int m = box.size(), n = box[0].size();vector<vector<char>> ans(n, vector<char>(m, '.'));for(int i = 0; i < m; ++i){int sum = 0;vector<int> presum(n,0);for(int j = 0; j < n; ++j){if(box[i][j] == '#')sum++;else if(box[i][j] == '*'){sum = 0;ans[j][m-1-i] = '*';//障碍物填上}presum[j] = sum;}int s = -1;for(int j = n-1; j >= 0; --j)//从底部开始摆{if(presum[j] > 0 && s == -1)s = presum[j];else if(presum[j] == 0)s = -1;if(s > 0)//有剩余的石头可摆{ans[j][m-1-i] = '#';s--;}}}return ans;}
};

292 ms 57.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1861. 旋转盒子(前缀和)相关推荐

  1. LeetCode:旋转链表【61】

    LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...

  2. css动画-3d旋转盒子

    css动画-3d旋转盒子 效果图: 思路: 1.一个容器,装6个子容器放6张图(我是采用的ul列表) <ul class="container"><li id=& ...

  3. Leetcode 208.实现 Trie (前缀树)(Implement Trie (Prefix Tree))

    Leetcode 208.实现 Trie (前缀树) 1 题目描述(Leetcode题目链接)   实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三 ...

  4. 【Leetcode -61.旋转链表 -82.删除排序链表中的重复元素Ⅱ】

    Leetcode Leetcode -61.旋转链表 Leetcode -82.删除排序链表中的重复元素Ⅱ Leetcode -61.旋转链表 题目:给你一个链表的头节点 head ,旋转链表,将链表 ...

  5. leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树

    leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...

  6. Leetcode (396 旋转函数)

    问题: 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] + ...

  7. LeetCode Path Sum III(前缀和)

    问题: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二叉树 ...

  8. LeetCode 61. 旋转链表

    给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ...

  9. 跟我打卡LeetCode 61旋转链表62不同路径63不同路径 II

    原创公众号:bigsai 关注后回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 49字母异位词分组&50pow(x,n)&51八皇后 LeetCode打卡 52八皇 ...

最新文章

  1. python 代码-代码的重试机制(python简单实现)
  2. ESXi上的固态硬盘识别为非SSD
  3. QImage与OpenCV中的MAT图像格式转换
  4. Android Lollipop (5.0) 原生代码 Settings 首页加载逻辑分析
  5. QT的QGLShaderProgram类的使用
  6. Android 的源代码结构
  7. This project needs to migrate WTP metadata
  8. java http get 图片_http协议get方法获取图片并保存到本地
  9. ps排版html,排版教程,超详细适合初学者的排版教程
  10. Dagger2基本使用
  11. 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
  12. Modeling and Enhancing Low-Quality Retinal Fundus Images
  13. css超出div部分用省略号,css实现超出div长度用省略号表示
  14. 四大名著红楼梦第二回 贾夫人仙逝扬州城 冷子兴演说荣国府
  15. sql 创建学生表 课程表 成绩表
  16. 关于出版物经营许可证
  17. 禅意Python - The Zen of Python
  18. kingcms php 下载,KingCMS企业版(PHP) v6.1.1641(Sp2)
  19. 租服务器一年多少钱,阿里云服务器租赁一年多少钱...
  20. html实现弹窗,html实现弹窗的实例

热门文章

  1. 《操作系统》OS学习(二):启动、中断、异常
  2. vuex的命名空间有哪些_Vuex在vue路由器中访问命名空间模块的getter
  3. 【Python基础入门系列】第09天:Python tuple
  4. JS_17 ES5,ES6
  5. 打印英文年历C语言函数,C语言打印年历
  6. Linux进程全解1——程序的开始、结束
  7. odoo基础数据加载
  8. Redis使用过程出现类型转换异常问题- 20190220
  9. gmake与make的区别
  10. PASCAL不仅仅是语言