Re: [閒聊] 每日leetcode已回收

看板Marginalman作者 (是oin捏)時間1年前 (2024/04/20 14:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串136/1548 (看更多)
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; } }; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.138.244 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1713593020.A.5D5.html
文章代碼(AID): #1c8rgyNL (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1c8rgyNL (Marginalman)