leetcode130. 被圍繞的區域

給定一個二維的矩陣,包含?'X'?和?'O'(字母 O)。

找到所有被 'X' 圍繞的區域,并將這些區域里所有的?'O' 用 'X' 填充。

示例:

X X X X
X O O X
X X O X
X O X X
運行你的函數后,矩陣變為:

X X X X
X X X X
X X X X
X O X X
解釋:

被圍繞的區間不會存在于邊界上,換句話說,任何邊界上的?'O'?都不會被填充為?'X'。 任何不在邊界上,或不與邊界上的?'O'?相連的?'O'?最終都會被填充為?'X'。如果兩個元素在水平或垂直方向相鄰,則稱它們是“相連”的。

思路:我們發現,沒有被“圍繞”的‘o’就是和邊界連接的。比如如下情況:

X X O X
X O O X
X X O X
X O O?X

'O'不會被改變,因為和邊界的‘O’連接,沒有被‘X’圍繞。

所以,我們從邊界開始dfs,把遇到的“O”變為“#”代表和邊界相連。

然后遍歷數組,把''O'變為X(因為不和邊界相連),把#變為X(因為和邊界相連)。

class Solution {public void solve(char[][] board) {if (board == null || board.length == 0) return;int m = board.length;int n = board[0].length;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {// 從邊緣開始搜索if ((i == 0 || j == 0 || i == m - 1 || j == n - 1) && board[i][j] == 'O') {dfs(board, 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';}//被改變過,和邊界連接if (board[i][j] == '#') {board[i][j] = 'O';}}}}public void dfs(char[][] board, int i, int j) {if (i < 0 || j < 0 || i >= board.length  || j >= board[0].length || board[i][j] == 'X' || board[i][j] == '#') {// board[i][j] == '#' 說明已經搜索過了. return;}board[i][j] = '#';dfs(board, i - 1, j); // 上dfs(board, i + 1, j); // 下dfs(board, i, j - 1); // 左dfs(board, i, j + 1); // 右}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444250.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

閑話目前游戲服務器的開發

我是從12年開始進入頁游行業&#xff0c;接觸到的第一個游戲項目就是淘米網的《摩爾莊園》&#xff0c;公司那個時候也剛在美紐交所上市&#xff0c;被Benson&#xff0c;魏震和Rock騰訊三巨頭的感染下&#xff0c;做著喜歡的游戲... &#xff08;后來在工作中我經常會遇到過不…

為什么我們仍然堅持用C++做游戲服務器

本篇文章純屬文字,不需要配圖。 首先以我個人觀點來說,C ++對于我的吸引力不僅僅是它的技術優點。c++是個龐大而奇怪的語言,很多新領域會選擇這個語言是因為有性能上的需求,但是又拿不準瓶頸會出在哪里,C++是一個什么地方調優都很方便的語言,內存,CPU,線程優先…

危險!!!也許你的web網站或服務正在悄無聲息地被SQL注入

2010年秋季,聯合國官方網站遭受SQL注入攻擊。 2014年一個叫“TeamDigi7al”的黑客組織攻擊了美國海軍的一個名為“Smart Web Move”的web應用。此次事件直接造成美國海軍數據庫超過22萬服役人員的個人信息被泄露。而事后,美國海軍動用了超過50萬美元來彌補此次的數據泄密事故…

手把手教你使用sql注入來繞過游戲后臺檢測

SQL注入毫無疑問是最危險的Web漏洞之一,因為我們將所有信息都存儲在數據庫中。其解決方案之一,有許多公司實施Web應用程序防火墻和入侵檢測/預防系統來試圖保護自己。但不幸的是,這些對策往往是不充分的,并且很容易被繞過。 盡管不能依賴防火墻來防止所有SQL注入,但一些防…

JSON是什么?如何產生的?

JSON&#xff1a;是一種輕量級的數據交換方式&#xff0c;它是基于javascript的一個子集。JSON采用完全獨立于語言的文本格式&#xff0c;但是也使用了類似于C語言家族的習慣這些特性使JSON成為理想的數據交換語言。易于人閱讀和編寫&#xff0c;同時也易于機器解析和生成。 掌…

設計模式 ---適配器模式

在一些業務場景里,你是否遇到過如下類似的需求: 1、系統需要使用現有的類,而此類的接口不符合系統的需要。 2、想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作,這些源類不一定有一致的接口。 3、通過接口轉換…

關于游戲排行榜設計開發的一些總結

前言 不管是手游還是端游,貌似都離不開排行榜,沒有排行榜的游戲是沒有靈魂的游戲,因為排行榜可以讓用戶分泌多巴胺,這樣日活才會上來,有了用戶就有錢賺。產品想方設法的讓用戶留存,設計各種排行榜:個人段位排名、個人積分或金幣排名、全球榜單實時排名。如果用戶量少的話…

leetcode6. Z 字形變換

將一個給定字符串根據給定的行數&#xff0c;以從上往下、從左到右進行 Z 字形排列。 比如輸入字符串為 "LEETCODEISHIRING" 行數為 3 時&#xff0c;排列如下&#xff1a; L C I R E T O E S I I G E D H N 之后&#xff0c;你的輸出需要從左往右逐行…

游戲排行榜-跳表實現原理分析

前言 做游戲的一般都有游戲排行榜的需求,要查一下某個uid的積分排名第幾,這里我給大家推薦之前我們使用的一種排序算法,跳表skiplist。 跳表是一個隨機化的數據結構。它允許快速查詢一個有序連續元素的數據鏈表。跳躍列表的平均查找和插入時間復雜度都是O(log n),優于普通隊…

如何使用redis來實現常見的游戲排行榜

前言 前面幾篇文章給大家聊了下目前的常用的排行榜做法。 關于游戲排行榜設計開發的一些總結 游戲排行榜-跳表實現原理分析 那么這篇文章將給大家帶來如何使用redis來實現常見的游戲排行榜功能。 為什么使用redis 如果你已經是redis的高級玩家可以跳過這段介紹。下面這段redis的…

leetcode43. 字符串相乘 經典大數+和*

43. 字符串相乘 難度中等264 給定兩個以字符串形式表示的非負整數 num1 和 num2&#xff0c;返回 num1 和 num2 的乘積&#xff0c;它們的乘積也表示為字符串形式。 示例 1: 輸入: num1 "2", num2 "3" 輸出: "6" 示例 2: 輸入: num1 &q…

ffmpeg優化mp4以及hls參數設置

ffmpeg是開源的音頻視頻編解碼工具 然而默認的參數對MP4不友好,需要自己設置 這里記錄一下簡單的優化參數 優化MP4使moov atom位于文件開頭 moov atom是mp4的索引信息. 瀏覽器獲得moov atom后,可以隨機搜索文件位置,讓拖動自由 ffmpeg默認是將moov atom放在文件末尾,我們需要前…

游戲熱更新:游戲客戶端熱更新那點事

前言 熱更新的內容可以是美術資源,可以是代碼,但相對來說,美術資源的更新不會受到約束,代碼實際上是重災區。本文介紹的主要是客戶端代碼熱更新。 熱更新對于開發者來說是一件麻煩事,特別對于看重效率、便捷性和結構的程序員來說,熱更新就是運營人員的不懂技術的…

Unity客戶端開發優化要點

腳本方面1、不需要高頻率調用的函數&#xff0c;使用InvokeRepeating&#xff08;或Time.frameCount%n&#xff09;代替Update2、SetParent、Instantiate、Find、IO操作、SetActive、GetComponent等耗時較長的接口應在loading的時候做3、Update盡量減少代碼邏輯、減少臨時變量、…

leetcode214. 最短回文串

214. 最短回文串 難度困難114 給定一個字符串 s&#xff0c;你可以通過在字符串前面添加字符將其轉換為回文串。找到并返回可以用這種方式轉換的最短回文串。 示例 1: 輸入: "aacecaaa" 輸出: "aaacecaaa"示例 2: 輸入: "abcd" 輸出: "…

Java對象的序列化

對象序列化就是把一個對象變為二進制數據流的一種方法。 一個類要想被序列化&#xff0c;就行必須實現java.io.Serializable接口。雖然這個接口中沒有任何方法&#xff0c;就如同之前的cloneable接口一樣。實現了這個接口之后&#xff0c;就表示這個類具有被序列化的能力。 先…

游戲服務器架構:網絡服務器端程序線程劃分

服務器端高性能網絡編程的核心在于架構,而架構的核心在于進程-線程模型的選擇。 作為服務器需要做網絡數據的收發,需要做數據庫拉取和保存,需要做日志存儲,需要做常規的游戲邏輯處理.....在這里我把這些功能劃分為三個大的線程類型:IO線程,事件線程,第三方庫線程。 …

游戲中的常見概率設計分析

前言游戲中的概率真的是讓人又愛又恨&#xff0c;很多玩家因為自己的屌絲氣質&#xff08;白嫖&#xff09;而棄坑玩不下去的&#xff0c;比如人盡皆知的某陰陽師&#xff0c;除了氪金&#xff0c;還肝&#xff0c;而且如果你的臉真的非常的黑&#xff0c;那也是打不過那些0氪金…

一個通用游戲后臺的設計模式實踐總結

搞業務開發的時候&#xff0c;發現有一些代碼的開發會讓人感覺非常簡便舒服&#xff0c;有一些代碼的開發卻有時候會讓人感覺心智負擔比較大。逐步總結的過程中&#xff0c;發現讓開發人員寫起來感覺舒服的代碼&#xff0c;大概率是因為當前模塊與其他模塊代碼耦合度低&#xf…

leetcode103. 二叉樹的鋸齒形層次遍歷

給定一個二叉樹&#xff0c;返回其節點值的鋸齒形層次遍歷。&#xff08;即先從左往右&#xff0c;再從右往左進行下一層遍歷&#xff0c;以此類推&#xff0c;層與層之間交替進行&#xff09;。 例如&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 …