文章目录

  • 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. RxJava 过滤操作符 distinct 和 distinctUntilChanged
  2. 自动化早已不是那个自动化
  3. c语言链表创建递归,递归创建二叉树c语言实现+详细解释
  4. BZOJ-3876-支线剧情-Ahoi2014-上下界网络流
  5. 语言代码编程大赛简讯_精品干货:C语言的高效编程与代码优化
  6. Entity Framework 6 Recipes 2nd Edition(13-2)译 - 用实体键获取一个单独的实体
  7. Windows下显示目录大小及文件个数
  8. 机器人踩滑板_不死神草、飞行滑板…超2000种创新发明在这里展出
  9. php 文件 计数,文件计数问题
  10. 解释python脚本程序的name变量及其作用_一些概念总结
  11. 技巧:你未必知道的IE8九大功能
  12. 7类数据分析常见的统计陷阱,快来排雷!
  13. 金蝶K/3WISE V14.0安装包下载地址,金蝶K3 WISE V14.0安装包资源包下载链接
  14. Python语法都会,一写程序就懵,有解么?
  15. PGMIntro概率图模型
  16. matlab中matconvnet,MATLAB2017a编译MatConvNet过程中出现的各种问题
  17. 在运行java程序时出现 Error: could not open c:\program Files\Java\jre6\lib\amd64\jvm.cfg'
  18. 关于微信小程序开发过程中的页面刷新的解决方案
  19. 计算机学业水平考试的选择题,信息技术学业水平考试选择题带答案.doc
  20. python的内置函数功能[翻译]

热门文章

  1. Python 内置模块之 logging
  2. python实例化对象做实参_如何在Python中记住类实例化?
  3. 【大数据】最新大数据学习路线(完整详细版,含整套教程)
  4. 在 Pycharm下使Python2和Python3共用Anaconda中的各种库/包的解决方法
  5. java使用xml存储数据_用存储过程和 JAVA 写报表数据源有什么弊端?
  6. xcode左侧不显示工程文件目录,提示NO Filter Results
  7. C语言判断两字符串同构,c语言实现判断两颗树是否同构
  8. php是一种,PHP是一种什么型的语言:()
  9. 利用CVE-2019-1040 - 结合RCE和Domain Admin的中继漏洞
  10. 【BZOJ3640】JC的小苹果 概率DP+高斯消元