欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > LeetCode 1861. Rotating the Box

LeetCode 1861. Rotating the Box

2025/5/7 16:18:19 来源:https://blog.csdn.net/weixin_42383726/article/details/143992937  浏览:    关键词:LeetCode 1861. Rotating the Box

🔗 https://leetcode.com/problems/rotating-the-box

题目

  • 给一个 m * n 的二维数组,# 代表花,* 代表墙
  • 二维数组顺时针旋转 90 度,# 会根据重力下落,要么到 * 被挡住,要么到底被挡住
  • 返回经过旋转后的二维数组

思路

  • M * N 数组,经过旋转之后 [i, j] 会变成 [j][m - i -1]
  • solution 1 是先进行重力处理,把 # 往右移动,直到碰到 * 或者到底。这里有两种处理方式,一种是遍历,另外一种是记录当前可填充 # 的位置
  • solution 2 时边重力处理,边重力处理 #,记录当前可填充 # 的位置,性能较优

代码

class Solution {
public:vector<vector<char>> rotateTheBox(vector<vector<char>>& box) {int m = box.size(), n = box[0].size();/* gravity 1for (int i = 0; i < m; i++) {for (int j = n - 2; j >=0; j--) {if (box[i][j] == '#') {int k = j;while (k < n - 1 && box[i][k + 1] == '.') {k++;}if (k > j) {box[i][k] = '#';box[i][j] = '.';}}}}*/// gravity 2for (int i = 0; i < m; i++) {int bottom = n -1;for (int j = n - 1; j >=0; j--) {if (box[i][j] == '#') {box[i][bottom] = '#';if (j != bottom) box[i][j] = '.'; bottom--;         } else if (box[i][j] == '*') bottom = j - 1;}}// rotatedvector<vector<char>> ans;for (int i = 0; i < n; i++) {vector<char> tmp;for (int j = 0; j < m; j++) {tmp.push_back(box[m - j -1][i]);}ans.push_back(tmp);}return ans;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词