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;
}
};