Re: [閒聊] 每日leetcode

作者: oinishere (是oin捏)   2024-04-20 14:03:38
https://leetcode.com/problems/find-all-groups-of-farmland/
題目:
有一個二維的陣列 代表邊版
邊版實施戒嚴
把1通通圍在一起變成矩形
並且裡面只會出現矩形 而且不會相鄰
問你 裡面的所有矩形的範圍
像是
100
011
011
他的範圍就是
{{0,0,0,0},{1,1,2,2}}
(左上xy 右下xy)
解法:
把他拆成幾個部分做成函式
分別是走到右邊 走到下面
還有把範圍內的甲甲通通消滅
然後對邊版掃蕩一次就能找到所有甲甲的範圍了
呼 還好我不是甲甲
class Solution {
public:
int walkdown(vector<vector<int>>& land, int i , int j )
{
int step = 0;
i ++;
while(i < land.size() && land[i][j] == 1)
{
i ++;
step ++;
}
return step;
}
int walkright(vector<vector<int>>& land , int i , int j )
{
int step = 0;
j ++;
while(j < land[0].size() && land[i][j] == 1)
{
j ++;
step ++;
}
return step;
}
void poop(vector<vector<int>>& land , int i , int j , int a , int b)
{
for(int p = i ; p <= a ; p ++)
{
for(int k = j ; k <= b ; k ++)
{
land[p][k] = 0;
}
}
}
vector<vector<int>> findFarmland(vector<vector<int>>& land)
{
vector<vector<int>> res;
int len = land.size();
int lenn = land[0].size();
for(int i = 0 ; i < len ; i ++)
{
for(int j = 0 ; j < lenn ; j ++)
{
if(land[i][j] == 1)
{
vector<int> paper;
paper.push_back(i);
paper.push_back(j);
paper.push_back(i + walkdown(land,i,j));
paper.push_back(j + walkright(land,i,j));
poop(land,paper[0],paper[1],paper[2],paper[3]);
res.push_back(paper);
}
}
}
return res;
}
};

Links booklink

Contact Us: admin [ a t ] ucptt.com