麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Leetcode 130. Surrounded Regions

2019-11-14 09:31:24
字體:
來源:轉載
供稿:網友

Given a 2D board containing ‘X’ and ‘O’ (the letter O), capture all regions surrounded by ‘X’.

A region is captured by flipping all ‘O’s into ‘X’s in that surrounded region.

For example,

X X X XX O O XX X O XX O X X

After running your function, the board should be:

X X X XX X X XX X X XX O X X

s思路: 1. 這種二維的題,套路就是用dfs。 2. 仔細觀察和分辨,o有兩種位置,一種是被包圍的,一種是不被包圍的,不被包圍的就一定在四個邊沿上可以看見。 3. 處理這兩個位置,有兩種思路:一種就是直接把被包圍的找出來,然后替換成x;另一種,則反其道而行。不直接找被包圍的,相對于被包圍的,沒有被包圍的更容易找到,就在四邊,通過遍歷四條邊沿,把和這些邊連接的o找到,先暫時換成s,然后遍歷一遍全部的符號,把o換成x,最后再遍歷一遍,把s換回o即可! 4. 哪個方法好?哪個快呢?先看第一個思路:在某個位置發現一個o,然后用dfs找相鄰的o,這時候是還不知道這一塊能不能被x全包圍,就這么找,等相鄰的區域全遍歷過,發現能全包圍,再遍歷一遍把這些o給修改成o,很麻煩;而第二個思路中,就沒有這樣的問題,因為我們事先已經知道這些o是不被包圍的,所以遍歷的同時就修改成s,多省事!所以這個問題還是在邊界處思考,求得解答!很多題的妙解都是在基于對邊界的考慮,因為在邊界處的行為是清楚的! 5. 你看,看問題把兩個方便都擺出來,比較比較,每個思路都想想,掂量掂量,也就差不多能看清問題的要害了! 6. 還可以用union find?

class Solution {public: void helper(vector<vector<char>>& board,vector<vector<int>>&dir,int i,int j){ ///* if(i<0||i>=board.size()||j<0||j>=board[0].size()||board[i][j]!='O') return; board[i][j]='S'; for(int k=0;k<4;k++){ helper(board,dir,i+dir[k][0],j+dir[k][1]); }*/ //bug:參考解釋https://discuss.leetcode.com/topic/29091/why-this-code-has-runtime-error/3 //上面的解法導致stackoverflow!! if(board[i][j]=='O'){ board[i][j]='S'; if(i>1) helper(board,dir,i-1,j); if(i<board.size()-1) helper(board,dir,i+1,j); if(j>1) helper(board,dir,i,j-1); if(j<board[0].size()-1) helper(board,dir,i,j+1); } } void solve(vector<vector<char>>& board) { // int m=board.size(); if(m<2) return; int n=board[0].size(); if(n<2) return; vector<vector<int>> dir={{1,0},{-1,0},{0,1},{0,-1}}; for(int j=0;j<n;j+=(n-1)){//bug:n做了操作,需要保證n-1>=1,否則for循環就是死循環 for(int i=0;i<m;i++){ //if(board[i][j]=='O') helper(board,dir,i,j); } } for(int i=0;i<m;i+=(m-1)){ for(int j=0;j<n;j++){ //if(board[i][j]=='O') helper(board,dir,i,j); } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(board[i][j]=='O') board[i][j]='X'; else if(board[i][j]=='S') board[i][j]='O'; } } }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线观看小视频 | 久久线视频 | 91女上位 在线播放 性欧美日本 | 黄在线免费看 | 99sesese | 久久成人精品视频 | 久久久久久久久91 | 日韩一级片一区二区三区 | 免费视频xxxx | 91精彩在线 | 狠狠操精品视频 | 中文字幕h| 国产精品成人av片免费看最爱 | 蜜桃成品人免费视频 | 一级做a爰性色毛片免费 | 99久久婷婷国产综合精品青牛牛 | 激情在线观看视频 | 久久久国产视频 | 粉嫩粉嫩一区二区三区在线播放 | 国产毛片网站 | 国产成人强伦免费视频网站 | 女人一级一级毛片 | 麻豆国产一区 | 欧美精品欧美 | 国内精品伊人久久 | 欧美××××黑人××性爽 | 成人福利在线免费观看 | 护士xxxx | 蜜桃视频观看麻豆 | 亚欧美一区二区 | 一级黄色淫片 | 综合网天天射 | 久久免费视频一区二区三区 | 91一级毛片 | 看片一区二区三区 | 久久99精品久久久久久青青日本 | 在线观看国产免费视频 | 大学生a级毛片免费视频 | 久久精精品 | www.精品视频 | 久久精品视频免费 |